📙 JVM 이란 ?
JVM 이란 Java Vertual Machine의 줄임말로 Java Application과 OS와 중간에서 동작하는 가상 머신을 말한다.
📖 JVM의 장점
- 어떤 OS에서도 실행될 수 있다.
- 자발적으로 메모리를 관리하는 Garbarge Collcector 가 존재하여 개발자들이 메모리 관리에 많은 신경을 쓰지 않아도 된다.
📙 JVM 구조 및 동작과정

📖 동작 과정
- Class Loader가 Compile 된 Java Application의 .class 파일들을 JVM 영역으로 로드한다.
- Execution Engine ( 실행 엔진 ) 이 .class 파일을 해석한다.
- 해석된 바이트 코드를 용도에 맞게 RunTime Data Area의 여러 영역으로 나누어 위치시킨다.
- RunTime Data Area에 위치된 바이트 코드가 실질적으로 프로그램을 동작시킴.
1번 과정 이전에 이루어지는 Compile과 Build 에 대해서는 Java Compile / Build 를 참고하길 바랍니다.
📖 Java Complier
- .java로 만들어진 소스코드를 .class 파일로 변환시킴. ( Complie )
📖 Class Loader
- .class로 변환된 바이트코드를 JVM 내로 Load 함.
- .class 파일을 기계어로 번역하여 Runtime Data Area에 배치함.
📖 Execution Engine
- Interpreter 방식
- 실행 중 프로그래밍 언어를 한 줄 씩 읽어가면서 해당 기능에 대응하는 기계어 코드를 실행
- 실행 시 마다 한 줄씩 읽기 때문에 실행 속도가 매우 느림
- JIT 컴파일 방식
- 실행 시점에서 Interpreter 방식으로 읽은 코드들을 캐싱하여 같은 함수가 존재하면 캐싱되어 있는 값을 사용한다.
- 캐싱되어 있는 값을 사용하기 때문에 매번 기계어 코드를 생성하는 것을 방지하고 시간을 단축시켜준다.
📖 Garbarge Collector ( GC )
RunTime Data Area에 배치된 인스턴스들 중 더 이상 사용하지 않는 인스턴스에 대해 메모리 해제를 진행한다. JVM 내에서 Garbage Colector 덕분에 예전보다는 개발자가 메모리 사용보다는 기능 구현에 조금 더 집중할 수 있다고 생각한다.
Heap 메모리 영역에서 참조되지 않는 객체들을 탐색 후 삭제하며 메모리 재활용을 진행함.
📖 Runtime Data Area
Runtime Data Area는 총 5가지의 영역으로 구분된다.
- PC Register
- Thread가 어떤 명령어로 실행되어야 할지 기록하는 부분 ( JVM 명령의 주소를 가진다. )
- JVM Stack
- 지역 변수, 매개변수, 메서드 정보, 임시 데이터 등을 저장하는 부분
- Native Method Stack
- 실제 실행할 수 있는 기계어로 작성된 프로그램을 실행시키는 영역
- Heap
- 런타임에 동적으로 할당되는 데이터가 저장되는 영역. 객체나 배열 생성이 해당됨.
- GC의 주요 대상이 되며, JVM 성능 이슈에 대해 가장 많이 언급되는 공간.
- Method Area
- JVM이 실행될 때 생성되며, JVM이 읽은 각각의 클래스와 인터페이스에 대한 런타임 상수 풀, 필드 및 메서드 코드, 정적 변수, 메서드의 바이트 코드 등을 보관함.