Java
[Java] JVM (Java Virtual Machine)
지금회
2023. 12. 12. 12:50
728x90
소개:
Java Virtual Machine (JVM)은 Java 언어로 작성된 프로그램을 실행하기 위한 핵심 컴포넌트로, 프로그램의 이식성과 보안을 강화하는 역할을 합니다. 이 블로그에서는 JVM의 구조와 동작 메커니즘에 대해 자세히 살펴보겠습니다.
1. JVM이란?
- 정의:
- JVM은 Java 프로그램을 실행하는 가상 컴퓨터로, 자바 언어로 작성된 바이트코드를 기계어로 변환하고 실행합니다.
- 목적:
- 자바의 주요 강점 중 하나인 "Write Once, Run Anywhere"를 가능하게 합니다.
2. JVM 구조
- Class Loader:
- 자바 클래스 파일(.class)을 JVM으로 동적으로 로드하는 역할을 합니다.
- 로딩, 링크, 초기화의 단계로 구성됩니다.
- Runtime Data Areas:
- JVM은 다양한 데이터 영역을 가지고 있습니다.
- Method Area: 클래스 수준의 정보 (클래스 이름, 메서드, 필드)를 저장합니다.
- Heap: 객체 인스턴스가 저장되는 메모리 영역입니다.
- Stack: 각 스레드마다 메서드 호출과 지역 변수를 저장하는 공간입니다.
- PC Register: 현재 수행 중인 스레드의 주소를 저장합니다.
- Native Method Stack: 자바 외의 언어로 작성된 네이티브 코드를 위한 스택입니다.
- JVM은 다양한 데이터 영역을 가지고 있습니다.
- Execution Engine:
- 바이트코드를 실제로 기계어로 해석하고 실행합니다.
- JIT(Just-In-Time) 컴파일러를 사용하여 성능을 향상시킵니다.
- Native Method Interface:
- 자바 외의 언어로 작성된 코드를 호출하거나 자바에서 호출할 수 있도록 하는 인터페이스입니다.
3. JVM 동작 메커니즘
- 로딩 (Loading):
- 클래스 로더가 클래스 파일을 읽어 메모리에 로드합니다.
- 링크 (Linking):
- 로드된 클래스에 대해 참조하는 외부 클래스 및 메서드와의 연결을 수행합니다.
- Verify, Prepare, Resolve의 단계로 나뉩니다.
- 초기화 (Initialization):
- 클래스 변수들을 기본값 또는 사용자가 지정한 값으로 초기화합니다.
- 실행 (Execution):
- 프로그램의
main()
메서드를 찾아 실행하며, 필요한 클래스와 메서드를 호출합니다.
- 프로그램의
4. 가비지 컬렉션 (Garbage Collection)
- 목적:
- 더 이상 사용되지 않는 객체들을 자동으로 찾아 메모리를 회수합니다.
- 알고리즘:
- 다양한 가비지 컬렉션 알고리즘이 있으며, 주요 알고리즘으로는 Mark and Sweep, Generational, G1(Garbage First) 등이 있습니다.
5. JIT 컴파일러 (Just-In-Time Compiler)
- 목적:
- 바이트코드를 기계어로 변환하여 런타임 성능을 향상시킵니다.
- 동작:
- 프로그램이 실행될 때, 필요한 부분의 바이트코드를 직접 기계어로 변환하고 캐시에 저장하여 재사용합니다.
6. JVM 튜닝과 성능 최적화
- 힙 크기 조정:
-Xms
와-Xmx
옵션을 사용하여 초기 힙 크기와 최대
728x90