저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다
1. 자바 가상 머신 제품군
제품명 | 시기/기반 | 주요 기능 및 특징 | 단점 및 한계점 |
Sun Classic VM | JDK 1.0 (최초 상용) | - 순수 인터프리터 방식 실행 | - 실행 효율이 낮음 |
Exact VM | 초기 JVM 중 | - 정확한 메모리 관리 - 메모리의 특정 주소 접근 가능 |
- 최신 정보 및 활용 예시 부족
|
HotSpot VM | OpenJDK 기본 JVM | - 핫 코드 감지 - JIT 컴파일 - 온스택 치환 |
- 메모리 사용량 증가 가능성
- 상황에 따라 성능 편차 |
GraalVM | LLVM 기반 Java SE 호환 |
- 다중 언어 지원 (Java, Kotlin, JS, Python 등) - 중간언어 변환 방식 - 추가 비용 없음 |
- 실험적 기능 존재
- 일부 언어는 제한적 지원 가능 |
2. 자바 기술의 미래
차세대 JIT 컴파일러
컴파일러 | 특징 | 장점 | 단점 |
C1 Compiler | - 컴파일 속도 빠름 - 최적화 적음 |
✔ 빠른 컴파일 ✔ 빠른 응답성 |
❌ 성능 최적화 부족 |
C2 Compiler | - 컴파일 속도 느림 - 최적화 많음 |
✔ 높은 성능 ✔ 복잡한 최적화 |
❌ 컴파일 시간 오래 걸림 |
Graal Compiler | - C2 대체 가능 - 자바로 작성됨 - 확장성 뛰어남 |
✔ 유지보수 용이 ✔ 다언어 지원 가능성 ✔ 최적화 성능도 우수 |
❌ 실행 초기 메모리 소모 가능성 |
네이티브를 향한 발걸음
기술명 | 주요 목적 | 특징 및 장점 | 단점 및 한계점 |
AppCDS | JVM 구동 시간 단축 | - 클래스 메타데이터 캐싱 - 여러 앱 간 공유 가능 |
- 클래스 구조가 바뀌면 다시 생성 필요 |
Epsilon GC | 초단기 애플리케이션 최적화 | - 메모리 회수 없음 - 할당만 수행 → GC 오버헤드 없음 |
- 장기 실행 앱에는 사용 불가 - OutOfMemory 빠르게 발생 가능 |
AOT Compiler | 실행 속도 향상 JVM 미탑재 환경 대응 |
- 사전 컴파일로 JIT 부담 없음 - 실행 파일 즉시 실행 가능 |
- OS/하드웨어별 별도 빌드 필요 - 리플렉션, 동적 바인딩 제약 |
3. 내 손으로 빌드하는 JDK
컴파일 매개변수
옵션 | 설명 | 예시 값 |
--with-debug-level=<level> | 디버깅 정보 및 최적화 수준 지정 |
release, fastdebug, slowdebug
|
--with-native-debug-symbols=<방식> | 네이티브 디버깅 심벌 정보 포함 여부 및 방식 |
none, internal, external, zipped
|
--with-version-string=<string> | 빌드되는 JDK의 버전 문자열 지정 |
pre, opt, build, feature, interim, update, patch
|
--with-jvm-variants=<변형> | 빌드할 JVM 변형(모드) 지정 |
server, client, minimal, core, zero, custom
|
--with-jvm-features=<기능목록> | custom JVM에서 활성화할 기능 지정 |
쉼표로 구분된 기능 목록
|
--with-target-bits=<비트> | 빌드할 JVM의 비트수 명시 | 32, 64 |
--with-<lib>=<path> | 외부 라이브러리 경로 지정 |
boot-jdk, freetype, cups 등
|
--with-extra-<flag kind>=<flag> | 추가적인 컴파일러 플래그 전달 |
cflags, cxxflags, ldflags
|
--with-conf-name=<이름> | 설정 구성 이름 정의 (out 디렉토리 이름 등에 반영됨) |
my-debug-build, optimized 등
|
'Java' 카테고리의 다른 글
[JVM 밑바닥까지 파헤치기] 3-1. 가비지 컬렉터와 메모리 할당 전략: 회수 (1) | 2024.12.19 |
---|---|
[JVM 밑바닥까지 파헤치기] 2. 자바 메모리 영역과 메모리 오버플로 (1) | 2024.12.19 |
[Java][Tutorial] 1-3. Learning the Java Language: Classes and Objects (0) | 2024.01.14 |
[Java][Tutorial] 1-2. Learning the Java Language: Language Basics (0) | 2024.01.14 |
[Java의 정석] 13-3. 스레드: 실행 제어 (1) | 2023.11.30 |