JVM(Java Virtual Machine) 이란?
- 자바 컴파일러(javac)에 의해 소스코드(.java)로 부터 변환된 자바 바이트코드(.class)를 해당 OS에 맞게 해석해주는 역할을 수행한다.
- 자바의 특징이라고 볼수 있는데 JAVA란 여기서 확인 가능하다.
JVM의 구조
- JVM의 구조는 크게 네가지의 구성요소로 볼 수 있다.
- Class Loader
- Execution Engine
- Runtime Data Area
- Garbage Collectors(GC)
Class Loader란
- 바이트 코드를 실행할 때 class 객체를 메모리 상에 로드하는 요소, 클래스의 인스턴스를 생성하면, Class Loader에 의해 메모리에 로드한다.
Execution Engine란
- Class Loader에 의해 메모리에 로드된 바이트코드를 실행하는 요소이고 Runtime Data Area에 배치된 바이트 코드는 Execution Engine에 의해 실행이 된다.
Runtime Data Area란?
- JVM의 메모리 영역으로 Method 영역과, Heap 영역은 모든 스레드에서 공유하며, 스택 영역과 네이티브 메서드 스택 영역 등은 스레드 별로 독립적인 메모리 공간을 갖습니다.
- Method 영역이란 프로그램 실행 중 클래스가 사용되면 JVM은 해당 글래스 파일을 읽어서 분석하여 클래스의 인스턴스 변수, 메소드 코드 등을 Methode Area에 저장한다. 이때 클래스 변수도 이 영역에 함께 생성된다.
- Heap 영역이란 사용자가 관리하는 인스턴스가 생성되는 공간으로 객체를 동적으로 생성하면 인스턴스가 Heap 영역의 메모리에 할당되어 사용되고, Garbage Collectors의 대상이 되는 영역이다.
- Stack 영역이란 프로그램 실행 중 발생하는 메서드 호출과 복귀에 대한 정보를 저장한다.
- Native Method Stack 영역이란 자바 이외의 C언어와 같은 언어가 필요한 경우 JNI 기술을 통해서 네이티브 메소드들이 바이트 코드로 변환되면서 사용되고 기록되는 영역이다.
Garbage Collectors(GC)란?
- Heap 영역에서 생성된 객체들 중에 더이상 참조하지 않는 메모리를 정리해주는 역할을 한다.
Reference
Blog
Blog