공부/Java
Java Virtual Machine(JVM)
ironk.im
2021. 5. 8. 22:22
반응형
Java는 소스 코드를 컴파일 하고 컴파일의 결과로 만들어진 바이트코드를 인터프리터에 의해 해석하여 실행되는 언어이다.
JVM 구조
JVM의 실행 순서
- JVM이 OS로부터 필요로 하는 메모리를 할당 받는다. JVM은 할당받은 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.
- Class Loader를 통해 자바 바이트 코드가 JVM Runtime Data Areas로 로딩 된다.
- 로딩된 바이트 코드가 Execution Engine에 의해 해석 된다.
- 해석된 바이트 코드는 JVM Runtime Data Areas에 배치되어 실행 된다.
- 실행 과정에서 Garbage Collection이 메모리 관리 작업을 수행한다.
Runtime Data Area
Heap
- 객체 인스턴스와 배열이 저장되는 영역
- Java에서 생성된 모든 객체는 이 힙 영역에 할당
- 힙은 모든 스레드가 공유하며, 가비지 컬렉터에 의해 관리
Stack
- 각 스레드마다 독립적으로 존재하는 메모리 영역
- 메서드 호출 시 생성되는 프레임(스택 프레임) 저장
- 각 프레임에는 메서드의 로컬 변수, 매개변수, 반환 주소 등 포함
- 메서드가 호출될 때 프레임이 스택에 추가되고, 메서드 실행이 완료되면 프레임 제거
Method
- 클래스에 대한 정보를 저장하는 영역
- 클래스의 구조(클래스 이름, 메서드, 필드, 상수 풀 등)와 정적 변수(static 변수) 정보 포함
- 모든 스레드가 공유
PC Register
- 각 스레드마다 존재하는 작은 메모리 공간
- 현재 실행 중인 JVM 명령 주소 저장
- 스레드가 실행 될 때, 해당 스레드의 PC 레지스터 업데이트
Native Method
- Java가 아닌 언어로 작성된 네이티브 메서드 호출 시 사용하는 스택
- 네이티브 메서드의 로컬 변수와 매개변수 저장
반응형