1. JVM이란?
- Java Virtual Machine(자바 가상 머신)의 약자로 자바 프로그램이 실행되는 환경을 제공하는 소프트웨어이다.
- 자바 프로그램을 실행할 때 자바 바이트코드(.class 파일)를 기계어로 변환해 실행할 수 있도록 한다.
- 자바 애플리케이션을 운영체제에 맞게 실행할 수 있게 만들어 주는 추상화 계층 역할을 하여 운영체제와 하드웨어에서 독립적으로 실행될 수 있도록 한다.
2. JVM 구성요소

- Class Loader(클래스 로더)
- 클래스 로더는 클래스 파일을 동적으로 메모리에 로드하는 역할을 한다.
- 로딩, 링크, 초기화 과정으로 나누어진다.
- Runtime Data Area(런타임 데이터 영역)
- Method Area(메서드 영역)
- 프로그램의 클래스 정보, 상수, 정적 변수, 정적 메서드 등을 저장하는 영역
- 프로그램은 메서드 영역에 저장된 바이트 코드를 하나씩 실행하는 방식으로 흐른다.
- Heap Area(힙 영역)
- 객체와 배열을 동적으로 할당하는 영역
- GC(가비지 컬렉터)에 의해 관리된다.
- Stack Area(스택 영역)
- 메서드 호출과 관련된 정보(지역 변수, 매개 변수, 리턴 주소 등)을 저장하는 영역
- 메서드가 호출되거나 변수가 선언될 때 스택에 생성되고 메서드가 종료되면 제거된다.
- 쓰레드마다 독자적인 영역을 가지고 있다.
- PC register(Program Counter Register)
- 현재 실행 중인 명령어의 주소를 저장하는 영역
- 메서드를 실행할 때, PC register를 사용하여 현재 어떤 명령어를 실행할지 추척한다.
- 쓰레드마다 독자적인 영역을 가지고 있다.
- Native Method Stack(네이티브 메서드 스택)
- 자바의 네이티브 메소드 호출을 위한 스택
- 네이티브 메소드를 호출할 때, 해당 메소드에 필요한 로컬 변수와 리턴 값을 저장하는데 사용된다.
- 네이티브 메소드를 호출하면 네이티브 메서드 스택에 메모리가 할당된다.
- Garbage Collecter(가비지 컬렉터)
- 더 이상 참조되지 않는 객체를 자동으로 제거하여 메모리를 관리한다.
- 자주 사용되는 객체와 사용하지 않는 객체를 구분하여, 메모리를 최적화한다.
- Execution Stack(실행 엔진)
- 바이트코드를 실제로 실행하는 역할을 한다.
- JIT(Just-In-Time) 컴파일러를 사용하여 실행중인 코드를 네이티브 코드로 변환하여 실행한다.
Share article