출처: The JVM Architecture Explained - DZone Java
JVM
은 크게 세 가지 Main subsystem 으로 나눌 수 있다.
1. ClassLoader(클래스 로더)
2. Runtime Data Area
3. Execution Engine
출처: #자바가상머신, JVM(Java Virtual Machine)이란 무엇인가? (tistory.com)
ClassLoader (클래스 로더)
JVM 내로 클래스 파일(*.class) 을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈이다.
자바는 동적 코드이므로 컴파일 타임이 아니라 런 타임시에 클래스를 동적으로 로드한다. jar 파일(*.jar) 내 저장된 클래스들을 JVM 위에 탑재하고 사용하지 않는 클래스들은 메모리에서 삭제한다.
클래스들은 로더 컴포넌트를 통해 로딩된다.
BootStrap ClassLoader, Extension ClassLoader, Application ClassLoader - 이 세가지 클래스 로더 컴포넌트로 구성되어 있다.
BootStrap ClassLoader
부트스트랩 클래스 경로에서 클래스를 로드한다.이는 오직 rt.jar 만 해당되며, 가장 높은 우선순위가 부여된다.
Extension ClassLoader
(jre\lib) 폴더에 있는 클래스를 로드한다.
Application ClassLoader
Application 레벨의 클래스 경로, path 환경 변수 등을 로드한다.
이 클래스 로더들은 모두 상속관계로 정의되어 있으며 delgate(위임) 방식으로 작업을 진행한다.
Verify 검증
바이트코드 검증기가 생성된 바이트코드가 올바른지 여부를 검증한다. 검증에 실패하면 검증 오류가 발생한다.
Prepare 준비, 전처리
모든 정적변수에 메모리가 할당되고 기본값으로 할당된다.
Resolve 해석
모든 심볼릭(명확하게 정의되지 않은) 메모리 참조는 메서드 영역에 있는 타입으로 직접 참조한다.
클래스 로딩의 마지막 단계이다.
모든 정적 변수는 자바 코드에 명시된 값으로 초기화되고, 정적 블록이 실행된다.
Java Garbage Collection Basics (oracle.com)
Java virtual machine - Wikipedia
What is the JVM? Introducing the Java Virtual Machine | InfoWorld
The JVM Architecture Explained - DZone Java
Working with the JVM | Clojure for the Brave and True (braveclojure.com)
자바 메모리 관리 - 가비지 컬렉션 (yaboong.github.io)
자바 메모리 구조(Runtime Data Area) :: 찐코딩노예 (tistory.com)
[JAVA] JVM이란? 개념 및 구조 (JDK, JRE, JIT, 가비지 콜렉터...) (tistory.com)
#자바가상머신, JVM(Java Virtual Machine)이란 무엇인가? (tistory.com)