

목 차
1. JVM의 정의 및 역할
2. JVM의 구성 요소
3. JVM의 특징
4. JVM의 동작 과정.

자바 바이트코드를 실행할 수 있는 가상 머신입니다.
이는 자바 애플리케이션과 운영 체제 사이에서 중개자 역할을 하며,
자바 코드를 컴파일하여 생성된 바이트코드를 해석하고 실행합니다.
JVM의 주요 역할은 플랫폼 독립성을 제공하여, 자바 프로그램이 다양한 운영 체제와 하드웨어에서 동일하게 실행될 수 있도록 지원하는 것입니다

정의:
클래스 파일을 로드하고, 런타임 데이터 영역에 배치합니다.
역할:
동적으로 클래스를 로드하며, 보안을 위한 검증도 수행합니다.
종류:
부트스트랩 클래스 로더, 확장 클래스 로더, 시스템 클래스 로더, 사용자 정의 클래스 로더 등이 있습니다.

메소드 영역(Method Area):
클래스의 메소드와 변수 정보를 저장합니다.
힙 영역(Heap Area):
객체를 저장하는 영역으로, 가비지 컬렉터에 의해 관리됩니다.
스택 영역(Stack Area):
쓰레드가 실행 중인 메소드의 호출 정보를 저장합니다.
PC 레지스터 영역(PC Register):
현재 실행 중인 명령어의 주소를 저장합니다.
네이티브 메소드 스택(Native Method Stack):
네이티브 메소드의 호출 정보를 저장합니다.

인터프리터(Interpreter):
바이트코드를 한 줄씩 실행합니다.
JIT(Just-In-Time) 컴파일러:
자주 실행되는 코드를 기계어로 컴파일하여 성능을 향상시킵니다.
AOT(Ahead-Of-Time) 컴파일러:
런타임 전에 코드를 기계어로 컴파일합니다.
GraalVM:
IT 컴파일러의 한 종류로, 더 빠른 성능과 낮은 메모리 사용을 제공합니다.

정의:
힙 영역에 할당된 객체 중 사용되지 않는 것을 자동으로 제거하여 메모리를 관리합니다.
종류:
세대별 가비지 컬렉션, 마크 앤 스위프, 병렬 가비지 컬렉션 등이 있습니다



클래스 로더가 바이트 코드를 읽어 메모리에 로드합니다. 이 과정은 로딩, 링크, 초기화로 나뉩니다.
로딩 (Loading): 클래스 파일을 읽고 메소드 영역에 저장합니다.
링크 (Linking): Verify, Prepare, Resolve 단계로 나뉩니다.
초기화 (Initialization): static 변수를 초기화합니다.