저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다
- 가상 머신 외부에서 다양한 방식으로 바이트 스트림을 로드하도록 하는 방법
1. 독립적인 공간
- 같은 클래스 로더로 로딩되어야 동치 관계의 클래스라 판단함
2. 부모 위임 모델
상위 클래스 로더에게 위임
- 처음부터 클래스 로드 시도 X
- 자신의 차례가 와서야 하위 클래스 로더가 로드 시도
접근 제한
- 자식 클래스 로더는 부모 클래스 로더에서 로드된 클래스를 접근할 수 있음
- 부모 클래스 로더는 자식 클래스 로더에서 로드한 클래스를 접근할 수 없음
구조
부트스트랩 클래스 로더
- JVM 내장
- JAVA_HOME/lib or -Xbootclasspath
- Class Lib
확장 클래스 로더
- JVM 외부에 독립적으로 존재
- java.lang.ClassLoader를 확장 (sun.misc.Launcher$ExtClassLoader)
- 클래스 라이브러리를 확장하는 매커니즘
- JAVA_HOME/lib/ext or java.ext.dirs (시스템 변수)
애플리케이션 클래스 로더
- JVM 외부에 독립적으로 존재
- java.lang.ClassLoader를 확장 (sun.misc.Launcher$AppClassLoader)
- 클래스 라이브러리를 확장하는 매커니즘
예외
기본 API에서 SPI를 호출할 경우
- 자식 클래스 로더에서 로드된 사용자 코드를 찾을 수 없음
- 스레드 컨텍스트 클래스 로더로 특정 스레드에 대한 클래스 로더를 설정
- 자식 클래스 로더의 클래스를 참조하도록 함
핫 모듈 시스템 (OSGi)
- 모듈화된 환경에서 각 모듈이 동적으로 교체하거나 추가할 수 있도록 하는 것
- 모듈별 자체 클래스 로더를 가지고 있음
'Java' 카테고리의 다른 글
[JVM 밑바닥까지 파헤치기] 8-1. 바이트코드 실행 엔진: 런타임 (0) | 2024.12.24 |
---|---|
[JVM 밑바닥까지 파헤치기] 7-3. 클래스 로딩 매커니즘: 자바 모듈 시스템 (2) | 2024.12.23 |
[JVM 밑바닥까지 파헤치기] 7-1. 클래스 로딩 매커니즘: 클래스 로딩 처리 과정 (3) | 2024.12.23 |
[JVM 밑바닥까지 파헤치기] 6-2. 클래스 파일 구조: 바이트코드 명령어 (2) | 2024.12.22 |
[JVM 밑바닥까지 파헤치기] 6-1. 클래스 파일 구조: 클래스 파일 (0) | 2024.12.22 |