반응형
💡JVM의 동작방식
- 자바로 개발된 프로그램을 실행하면 JVM은 OS에 메모리를 할당합니다.
- 자바컴파일러(javac)가 자바파일(.java)을 바이트코드(.class)로 컴파일 합니다.
- ClassLoader를 통해서 바이트코드를 JVM Runtime Data Area로 로딩합니다.
- Runtime Data Area에 있는 바이트코드들은 Excution Engine을 통해 해석됩니다.
- 해석된 바이트코드는 Runtime Data Area의 각 영역에 배치되어 수행하며 이 과정에서 Excution Engine에 의해 GC동작과 스레드 동기화가 이루어집니다.
📌클래스 로더 (Class Loader)
JVM의 시작 단계에서 클래스 로더가 클래스 파일들을 로드하고 메모리에 올립니다. 클래스 로더는 세 가지 주요 부분으로 나뉩니다.
- Bootstrap Class Loader: Java의 기본 클래스들을 로드합니다.
- Extension Class Loader: Java의 확장 클래스들을 로드합니다.
- Application Class Loader: 애플리케이션 클래스들을 로드합니다.
📌실행엔진 (Excution Engine)
실행 엔진은 바이트 코드를 실제로 실행하는 역할을 합니다. 실행 엔진은 크게 두 부분으로 나뉩니다.
- Interpreter (인터프리터): 바이트 코드를 한 줄씩 해석하고 실행합니다.
- Just-In-Time Compiler (JIT 컴파일러): 바이트 코드를 머신 코드로 직접 번역하고 실행합니다. 이렇게 컴파일된 코드는 더 빠르게 실행됩니다.
📌가비지 콜렉터 (Garbage Collector)
가비지 컬렉터는 더 이상 참조되지 않는 객체를 수거하고 메모리를 회수합니다. Java 프로그래머는 메모리 관리를 수동으로 처리할 필요가 없습니다. Heap 메모리 영역에 생성(적재)된 객체들 중에 참조되지 않은 객체들을 탐색 후 제거하는 역할을 하며 해당 역할을 하는 시간은 정확히 언제인지를 알 수 없습니다. GC역할을 수행하는 스레드를 제외한 나머지 모든 스레드들은 일시정지상태가 됩니다.
📌런타임 데이터 영역 (Runtime Data Area)
JVM은 데이터 저장을 위한 다양한 런타임 데이터 영역을 갖고 있습니다.
- Method Area (메서드 영역): 클래스 멤버(필드, 메서드)의 정보와 정적 변수가 저장되는 곳입니다.
- Heap (힙): 동적으로 생성된 객체와 배열이 저장되는 곳으로, 가비지 컬렉션의 대상입니다.
- Stack (스택): 메서드 호출과 관련된 로컬 변수, 메서드 호출 스택 등이 저장되는 곳입니다.
- PC Register (프로그램 카운터 레지스터): 현재 실행 중인 스레드의 주소를 저장합니다.
- Native Method Stack (네이티브 메서드 스택): 네이티브 코드(Java 외부의 코드) 호출과 관련된 스택입니다.
반응형
'프로그래밍 > Java' 카테고리의 다른 글
[Java] Interface와 Abstract Class의 차이 (0) | 2023.10.11 |
---|---|
[Java] 클래스, 객체, 인스턴스의 차이 (2) | 2023.10.10 |
[Java] OOP의 5대원칙(SOLID) (0) | 2023.10.04 |
[Java] 캡슐화와 은닉화의 차이 (0) | 2023.10.04 |
[Java] OOP의 4가지 특징 (1) | 2023.10.04 |