JVM은 자바 가상 머신의 약자로, 자바와 운영체제 사이에서 중개자 역할을 수행함으로써 자바가 운영체제에 의존적이지 않고 독립적으로 프로그램을 실행할 수 있도록 한다. 그리고 JVM은 Garbage Collector, Class Loader, Execution Engine, Runtime Data Area으로 이루어져 있다.
Garbage Collector는 힙 영역에서 더이상 사용되지 않는 객체들을 제거하고 메모리를 회수하는 역할
클래스 파일을 JVM 내의 Runtime Data Area에 로드하고 링크를 통해 배치하는 역할
Class Loader를 통해 로드된 클래스 파일을 실행하는 역할
PC Register : Thread가 시작될 때 생성되며 현재 수행 중인 JVM의 명령어 주소를 가지고 있다.
Stack Area : 지역 변수, 파라미터 등이 생성되는 영역이며 실제 객체는 Heap에 할당되고 해당 레퍼런스만 Stack에 저장된다.
Heap Area : 동적으로 생성된 오브젝트와 배열이 저장되는 곳으로 GC의 대상 영역이다.
Method Area : 클래스 멤버 변수, 메소드 정보, Type 정보, Constant Pool, static, final 변수 등이 생성된다. 상수 풀(Constant Pool)은 모든 Symbolic Reference를 포함하고 있다.