250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 티스토리챌린지
- Proxy Object
- Access Modifier
- 접근 제어자
- dotnet
- 혼공
- Wildcard
- Interface
- literal
- 혼공자바
- 오블완
- Functional Interfaces
- java
- 나도코딩
- noncluster index
- HashMap
- 혼공컴운
- 접근제어자
- types
- 자율학습
- Spring Data JPA
- 네트워크
- 인터페이스
- 스프링 부트 3
- 0 시작
- 혼공학습단
- cluster index
- Lazy loading
- entrySet
- 인프런
Archives
- Today
- Total
지금을 사는 사람
[Java] JVM (Java Virtual Machine) 본문
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
'Java' 카테고리의 다른 글
[Java] 접근 제어자(Access Modifiers) (1) | 2023.12.22 |
---|---|
[Java] 애노테이션(Annotation) (0) | 2023.12.15 |
[Java] 컬렉션 (Collection) (1) | 2023.12.12 |
[Java] 리터럴 풀 (literal pool) (0) | 2023.12.12 |
[Java] 람다 표현식(Lambda) (1) | 2023.12.07 |