[JAVA] 자바의 3요소 - JVM, JRE, JDK

1. 구성
- JVM
- JRE
- JDK

2. JVM(Java Virtual Machine)
- 정의 : 자바 프로그램이 실행되는 가상 환경입니다.
- 역할 : 자바 프로그램은 소스 코드를 작성한 후 컴파일되면 바이트코드(Bytecode)로 변환됩니다. JVM은 이 바이트코드를 실행하고, 필요시 JIT 컴파일러를 사용하여 실행 중에 바이트코드를 기계어로 변환하여 실행할 수 있습니다. 또한 Windows, Mac, Linux 등 어떤 플랫폼에서도 실행 가능하게 해 프로그램의 독립성을 보장하고, 실행 중 예외 처리 등을 통해 프로그램의 안전성을 유지합니다.
- 구성 요소
- 클래스 로더 (Class Loader) : Class Loader는 클래스 파일을 찾고 메모리에 올리는 역할을 하며, 클래스가 처음 호출될 때마다 클래스를 로드합니다.
- Execution Engine (실행 엔진) : 실제로 바이트코드를 실행하는 역할을 합니다. 실행 엔진은 바이트코드를 읽고 명령어 단위로 실행하여, 프로그램을 실제로 수행합니다. 인터프리터(바이트코드를 한 줄씩 실행) 또는 JIT 컴파일러(바이트코드를 기계어로 변환 후 실행) 방식으로 동작할 수 있습니다.
- 메모리 관리 영역 : JVM은 프로그램이 실행되는 동안 사용할 메모리 공간을 관리합니다.
- 주요 메모리 영역:
- 힙(Heap): 동적으로 할당되는 객체들이 저장되는 메모리
- 스택(Stack): 메소드 호출 시마다 할당되는 메모리 공간, 메소드 종료 시 자동으로 제거됩니다.
- 메소드 영역(Method Area): 클래스 정보와 같은 데이터를 저장합니다.
- Garbage Collector (가비지 컬렉터) : 더 이상 사용되지 않는 객체를 자동으로 정리하여 메모리를 해제합니다. 이를 통해 메모리 관리를 자동화하고, 개발자가 직접 메모리 관리에 신경 쓸 필요가 줄어듭니다.
3. JRE(Java Runtime Environment)
- 정의 : 자바 애플리케이션을 실행하기 위한 환경입니다.
JVM을 포함하며, 자바 프로그램을 실행하는 데 필요한 라이브러리와 클래스 파일을 제공합니다.
- 역할 : 개발보다는 실행에 초점을 맞춰 자바 프로그램이 올바르게 실행될 수 있도록 필요한 환경을 제공합니다.
- 구성 요소
- JVM
- 표준 라이브러리(클래스 파일 및 패키지)
- 기타 지원 파일
4. JDK (Java Development Kit)
- 정의 : 자바 애플리케이션을 개발하기 위한 도구 모음입니다.
JDK에는 JRE뿐만 아니라 자바 개발에 필요한 컴파일러 및 도구가 포함되어 있습니다.
- 역할
- 자바 프로그램을 작성하고, 컴파일하며, 디버깅하는 데 사용됩니다.
- 개발자용 도구로 자바 애플리케이션의 생성을 지원합니다.
- 구성 요소
- JRE
- 컴파일러 (javac)
- 디버거 (jdb)
- 기타 도구 (예: jar, javadoc)