[Java의 실행원리 0편] 시리즈 개요
자바를 복습하려고 자바의 정석 첫 장을 펼치자마자 난관에 봉착했다. 예전에는 아무 생각없이 읽었지만, JIT 컴파일러, HotSpot JVM, Runtime Constant Pool 등 외계어를 도저히 무시할 수 없어서 자바의 실행원리를 제대로 정리해야겠다고 다짐하여 글을 작성한다. 시리즈로 작성하려고 하는데, 본 게시글은 지적 호기심으로 깊게 검색해본 내용으로 초심자에게 적합하지 않을 수 있다.
설명하기에 앞서, Java는 썬 마이크로시스템즈(현 Oracle)에 의해 개발되었지만, JVM 명세(The Java Virtual Machine Specification)를 따르기만 하면 어떤 벤더든 JVM을 개발하여 제공할 수 있어서 JVM의 세부적인 구현은 다를 수 있다. 이 때문에 Hotspot JVM, IBM JVM, Azul zulu prime JVM 등 다양한 JVM이 있지만, 해당 시리즈에서 설명하는 JVM은 Oracle의 Hotspot JVM을 기준으로 설명한다. (근데 나는 zulu 사용 중이다 ㅋ)
아래의 그림을 보며, 목차에 대하여 설명하겠다.
[Java의 실행원리 1편] Compile-time 환경
- JVM, JRE, JDK에 대한 이해
- 모듈화로 인해 Java 9부터 JDK가 어떻게 변화했는지
- Java로 작성된 Source Code 파일(.java)이 자바 컴파일러(javac)에 의해 Byte Code 파일(.class)로 변하는 과정
[Java의 실행원리 2편] Runtime 환경 - JVM Class Loader
- Dynamic Loading (동적 로딩)
- Bootstrap Class Loader / Extension Class Loader / System Class Loader
- 변환된 클래스 파일이 JVM의 클래스 로더에 의해 JVM 메모리에 올라가는 과정
[Java의 실행원리 3편] Runtime 환경 - JVM Memory, Runtime Data Areas
- Method area, Heap area, Stack area, PC Register, Native Method Stack
- Constant Pool, Runtime Constant Pool, String Constant Pool 셋은 다를까?
- Permenant 영역 → Metaspace 영역으로 변하면서 생긴 변화
- static object 저장 위치는 method area가 아닌 heap area
[Java의 실행원리 4편] Runtime 환경 - JVM Execute Engine
- Execute Engine의 Interpreter, JIT Compiler, Garbage Collector
- JNI를 통해 Host Operating System의 Native Method Libraries와 상호작용 하는 것
- Heap 영역을 자세히 보고 GC 알고리즘 살펴보기
나와 비슷한 지적 호기심을 얻은 사람들을 위하여 해당 시리즈를 바친다.
※ 본 게시글은 공부하면서 작성했기에 틀린 부분이 있을 수 있습니다. 질문 사항이나 댓글로 알려주시면 감사하겠습니다.