티스토리 뷰

자바를 복습하려고 자바의 정석 첫 장을 펼치자마자 난관에 봉착했다. 예전에는 아무 생각없이 읽었지만, 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 사용 중이다 ㅋ) 

 

아래의 그림을 보며, 목차에 대하여 설명하겠다.

 

그림 1. Java의 실행원리 Made by Dev Uni

 

[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 알고리즘 살펴보기

 

나와 비슷한 지적 호기심을 얻은 사람들을 위하여 해당 시리즈를 바친다.

 

※  게시글은 공부하면서 작성했기에 틀린 부분이 있을 있습니다. 질문 사항이나 댓글로 알려주시면 감사하겠습니다.

댓글