JVM
Java Virtual Machine의 약자.
각각 운영체제별 JVM을 설치한다면, Java 프로그램을 한 번 만들기만 하면 어느 운영체제에서든 실행할 수 있다.
→ 플랫폼 독립성, 운영체제에 종속적
가비지 컬렉션을 사용하여 메모리 관리를 자동으로 수행한다.
JVM 메모리 구조

JVM은 크게 4가지 구조로 이루어져 있다.
Class Loader
- JVM 내로 클래스 파일을 로드하고, 링크를 통해 배치 하는 작업을 수행
- 로드 : 클래스 파일을 바이트 코드로 읽어 메모리로 가져오는 과정
- 링크 : 바이트 코드가 자바 규칙을 따르는지 검증, 클래스에 정의된 필드, 메소드, 인터페이스들을 나타내는 데이터 구조를 준비하며,
그 클래스가 참조하는 다른 클래스를 로딩한다.
- 클래스 파일을 분석한 뒤에 운영체제로부터 할당받은 Runtime Data Area에 적재.
Runtime Data Area
- JVM의 메모리 영역으로, 자바 애플리케이션을 실행할 때 사용되는 데이터를 적재하는 영역
- Method Area
- Heap Area
- Stack Area
- PC Register
- Native Method Stack
Execution Engine
- Runtime Data Area에 배치된 바이트 코드를 해석하며 실행.
- 이 때 인터프리터 방식과, JIT 컴파일 방식을 혼합하여 해석한다.
- 인터프리터(Interpreter) 방식 : 바이트 코드를 한 줄씩 읽고 해석한다.
- JIT 컴파일(Just-In-Time compile) 방식 : 바이트 코드를 런타임 시점에 바로 기계어로 변환한다.
- 최초의 JVM은 인터프리터 방식만 사용하여 실행 속도가 느렸지만, JIT 컴파일 방식을 추가하여 이를 보완하고자 했다.
그런데 JIT 컴파일은 바이트코드를 기계어로 바꾸기 때문에 실행 속도가 빠르지만 변환하는 데 비용이 발생하게 된다.
그래서 인터프리터 방식을 사용하다가 일정한 기준이 넘어가면 JIT 컴파일 방식으로 실행한다.
Garbage Collector
- 힙 메모리 영역에 생성된 객체들 중 더 이상 사용하지 않는 객체를 해제시켜 메모리를 반환한다.
- Garbage Collector가 동작하는 시간은 언제인지 정확히 알 수 없다.
Runtime Data Area 메모리 영역

1. Method Area
- 모든 쓰레드가 공유하는 메모리 영역.
- Method Area는 클래스, 인터페이스, 메소드, 필드, static 변수 등의 바이트 코드를 보관.
Heap Area
- 모든 쓰레드가 공유하는 메모리 영역.
- new 키워드로 생성된 객체와 배열이 생성되는 영역.
- Method area에 로드된 클래스만 생성이 가능하다. Garbage Collector가 동작하는 영역
Stack Area
- 메소드 호출 시마다 각각의 스택 프레임(그 메소드만을 위한 공간)이 생성됨.
- 그 메소드 안에서 사용되는 값들을 저장하고, 호출된 메소드의 매개변수, 지역변수, 리턴 값, 연산 시 일어나는 값들을 임시로 저장
- 메소드 수행이 끝나면 프레임 별로 삭제됨
PC Register
- 쓰레드가 시작될 때 생성되며, 쓰레드마다 하나씩 존재한다.
- 쓰레드가 어떤 부분을 무슨 명령으로 실행해야 할지 기록하는 부분
- 현재 수행 중인 JVM명령의 주소를 갖는다.
⭐발표자 : 이현승님
JVM
Java Virtual Machine의 약자.
각각 운영체제별 JVM을 설치한다면, Java 프로그램을 한 번 만들기만 하면 어느 운영체제에서든 실행할 수 있다.
→ 플랫폼 독립성, 운영체제에 종속적
가비지 컬렉션을 사용하여 메모리 관리를 자동으로 수행한다.
JVM 메모리 구조
JVM은 크게 4가지 구조로 이루어져 있다.
Class Loader
- 로드 : 클래스 파일을 바이트 코드로 읽어 메모리로 가져오는 과정
- 링크 : 바이트 코드가 자바 규칙을 따르는지 검증, 클래스에 정의된 필드, 메소드, 인터페이스들을 나타내는 데이터 구조를 준비하며,
그 클래스가 참조하는 다른 클래스를 로딩한다.
- 클래스 파일을 분석한 뒤에 운영체제로부터 할당받은 Runtime Data Area에 적재.
Runtime Data Area
- Method Area
- Heap Area
- Stack Area
- PC Register
- Native Method Stack
Execution Engine
- 인터프리터(Interpreter) 방식 : 바이트 코드를 한 줄씩 읽고 해석한다.
- JIT 컴파일(Just-In-Time compile) 방식 : 바이트 코드를 런타임 시점에 바로 기계어로 변환한다.
- 최초의 JVM은 인터프리터 방식만 사용하여 실행 속도가 느렸지만, JIT 컴파일 방식을 추가하여 이를 보완하고자 했다.
그런데 JIT 컴파일은 바이트코드를 기계어로 바꾸기 때문에 실행 속도가 빠르지만 변환하는 데 비용이 발생하게 된다.
그래서 인터프리터 방식을 사용하다가 일정한 기준이 넘어가면 JIT 컴파일 방식으로 실행한다.
Garbage Collector
Runtime Data Area 메모리 영역
1. Method Area
Heap Area
Stack Area
PC Register
⭐발표자 : 이현승님