1) 컴파일된 바이트 코드를 기계가 이해할 수 있는 기계어로 변환한다.
2) 스택 기반의 가상 머신이다.
3) 메모리 관리와 Garbage Collector를 수행한다.

JVM의 구조에는 크게 Class Loader, Runtime data areas, Execution Engine, GC 으로 나누어져 있다.
Class Loader는 클래스 파일을 Runtime Data Area의 메서드 영역으로 불러오는 역할을 한다.
Execution Engine은 class파일과 같은 ByteCode를 실행 가능하도록 해석한다.
GC(Garbage Collector)는 메모리 관리 기법 중 하나로, Heap 영역에 배치된 객체들을 관리하는 모듈이다.
Runtime Data Area는 런타임 시 클래스 데이터와 같은 메타 데이터와 실제 데이터가 저장되는 곳이다. 간단하게 말하자면 프로그램을 수행하기 위해 OS로부터 할당받은 메모리 영역을 의미한다. (Java 메모리 공간)
Runtime Data Area에는 또다시 Method Area, Heap, PC Registers, Java Stacks, Native Method Stacks로 나누어진다.

PC Register
JVM은 스택 기반의 가상 머신으로, CPU에 직접 접근하지 않고 Stack에서 주소를 뽑아서 가져온다. 가져온 주소는 PC Register에 저장된다.
따라서, 현재 어떤 명령을 실행해야 할 지에 대한 기록을 담당
JVM Stacks
호출된 메서드의 파라미터, 지역 변수, 리턴 값 및 연산 값 등이 저장되는 영역
프로그램 실행 시 임시로 할당되었다가 메서드를 빠져나가게 되면 소멸되는 특성의 데이터들이 저장되는 영역 메서드 호출 시마다 스택에 각각의 스택 프레임이 생성되고, 수행이 끝나면 스택 포인트에서 해당 프레임을 제거
Native Method Stacks
Java 이외의 언어에 제공되는 Method의 정보가 저장되는 공간 / Java Native Interface를 통해 바이트 코드로 저장 Kernel이 자체적으로 Stack을 잡아 독자적으로 프로그램을 실행시키는 영역
Heap
GC(가비지 컬렉션)의 대상이 되는 영역.
객체를 동적으로 생성하게 되면 인스턴스가 Heap 영역의 메모리에 할당된다.
단, 레퍼런스 변수의 경우, Heap에 인스턴스가 저장되는 것이 아닌 포인터가 저장된다.
Method Area
클래스 정보를 처음 메모리에 올릴 때 초기화되는 대상을 저장하기 위한 영역
올라가는 정보는 다음과 같다.