저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다
- 가상 머신 외부에서 다양한 방식으로 바이트 스트림을 로드하도록 하는 방법
1. 클래스 동치 조건
- 같은 클래스 로더로 로딩되어야 동치 관계의 클래스라 판단함
- 서로 다른 클래스 로더로 같은 .class를 로드하면 완전히 다른 타입으로 취급됨
2. 부모 위임 모델
특징 | 설명 |
위임 순서 |
상위 클래스 로더에게 먼저 위임, 실패하면 자기 자신이 로드 시도
|
이점 |
핵심 Java API 중복 로딩 방지, 보안성 향상
|
접근 제한 |
🔹 자식 → 부모 접근 가능
🔹 부모 → 자식 접근 불가 |
3. 주요 클래스 로더 구조
클래스 로더 | 설명 |
부트스트랩 클래스 로더 | JVM 내장 JDK 기본 클래스 로딩 (JAVA_HOME/lib 또는 -Xbootclasspath) |
확장 클래스 로더 |
lib/ext 또는 java.ext.dirs 내의 클래스 로딩
sun.misc.Launcher$ExtClassLoader |
애플리케이션 클래스 로더 |
사용자 클래스패스(classpath) 기반 클래스 로딩
sun.misc.Launcher$AppClassLoader |
4. 예외 상황: 기본 API에서 SPI를 호출할 경우
- SPI는 JDK 클래스가 사용자 구현체를 호출해야 하는데, 이 경우 부모 → 자식 접근 불가 원칙 때문에 실패 가능
- 해결 방법: 스레드 컨텍스트 클래스 로더로 우회하기
- Thread.currentThread().setContextClassLoader(...)
- 사용자 정의 클래스 로더를 명시적으로 전달해 자식 로더의 클래스를 접근 가능하게 만듦
5. 핫 모듈 시스템 (OSGi)
- 각 모듈이 자체 클래스 로더를 가지며, 동적으로 추가/제거/갱신 가능한 시스템
항목 | 설명 |
장점 |
모듈 단위 격리 + 유연한 클래스 관리 + 런타임 재배포 가능
|
예시 환경 |
Eclipse 플러그인, IoT 게이트웨이 시스템 등에서 활용
|
'Java' 카테고리의 다른 글
[JVM 밑바닥까지 파헤치기] 8-1. 바이트코드 실행 엔진: 런타임 (0) | 2024.12.24 |
---|---|
[JVM 밑바닥까지 파헤치기] 7-3. 클래스 로딩 매커니즘: 자바 모듈 시스템 (3) | 2024.12.23 |
[JVM 밑바닥까지 파헤치기] 7-1. 클래스 로딩 매커니즘: 클래스 로딩 처리 과정 (3) | 2024.12.23 |
[JVM 밑바닥까지 파헤치기] 6-2. 클래스 파일 구조: 바이트코드 명령어 (2) | 2024.12.22 |
[JVM 밑바닥까지 파헤치기] 6-1. 클래스 파일 구조: 클래스 파일 (0) | 2024.12.22 |