JVM
- 자바 가상 머신
- 자바 바이트 코드를 OS에 맞는 바이너리 코드로 컴파일하여 실행
- 자바는 플랫폼 독립적이지만 바이트 코드를 컴파일하는 JVM은 플랫폼 종속적이다.
JVM 의 구조
ClassLoader
- .class 파일의 바이트 코드를 읽고 메모리에 저장한다.
- 로딩, 링크, 초기화 순으로 진행하여 메모리의 각 영역에 데이터를 저장
Memory
Method 영역
- 클래스 수준의 정보를 저장
- 클래스 이름, 부모 클래스 이름, 메소드, 변수
- 공유 자원으로서 쓰레드에 상관없이 사용 가능한 자원
Heap 영역
- 객체를 저장하며 Method 영역의 자원과 마찬가지로 공유 자원이다.
Stack 영역
- 쓰레드마다 런타임 스택을 생성하고 그 안에 메서드 호출마다 스택 프레임을 쌓는다. 쓰레드가 종료되면 런타임 스택도 제거된다.
PC Register
- 쓰레드마다 쓰레드 내 현재 실행할 위치를 가리키는 포인터가 생성된다.
Execution Engine
Interpreter
- 바이트 코드를 한 줄씩 바이너리 코드로 해석하여 실행
JIT Compiler
- 인터프리터의 효율을 높이기 위해 작동하는 컴파일러
- 인터프리터가 반복되는 코드를 발견하면 해당 코드들을 모두 네이티브 코드로 컴파일한다.
- 네이티브 코드로 컴파일된 코드는 인터프리터가 더 이상 해석하지 않고 바로 실행하여 속도가 향상된다.
Gavage Collector
- 더 이상 참조되지 않는 객체를 모아서 메모리를 해제한다.
'Java' 카테고리의 다른 글
애너테이션 (0) | 2022.09.06 |
---|---|
Thread의 동기화 처리 (0) | 2022.09.04 |
Demon Thread (0) | 2022.09.04 |
Thread 의 동시성과 병렬성 (0) | 2022.09.01 |
자바 소스 코드의 실행 과정 (0) | 2022.08.30 |