저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다
1. JPMS
- Java 9에서 도입된 모듈 시스템
- 자유롭게 설정 가능한 캡슐화 격리 매커니즘
- 모듈 경계를 통해 각 모듈이 서로의 내부를 참조하지 못함
- 기존의 클래스패스에 의존한 안정성 문제를 해결
- 의존성이 실제 존재하는지는 런타임에서 확인되었음
- 컴파일 타임에서 의존성 체크 후 실행 (모듈간의 의존성이 먼저 정의되어 있음)
모듈 정의
- module-info.java
- 경계 정의
구성
- requires: 수입하는 모듈 목록
- exports: 내보내는 모듈 목록
- uses: 수입하는 서비스 목록
- provides: 내보내는 서비스 목록
- open: 내보내는 리플렉션 API 목록
모듈 호환성
모듈 패스
- 모듈 시스템에서 모듈이 위치하는 경로
- 기존 클래스패스 방식과 호환되도록 도입된 방식
- module-info.java 존재 여부로 모듈 여부가 판단됨
2. 모듈화 시대의 클래스 로더
플랫폼 클래스 로더
- 확장 클래스 로더가 플랫폼 클래스 로더로 대체됨
- JDK 전체가 모듈화되면서 모듈들 안의 클래스 라이브러리들은 필요성을 잃음
- JAVA_HOME/jre 디렉토리가 사라짐
BuiltinClassLoader
- 부트스트랩, 플랫폼, 애플리케이션 클래스 로드의 확장 클래스 (URLCLassLoader에서 변경됨)
- 모듈 간 의존성을 관리함
담당 모듈
부트스트랩 클래스 로더
- 기본 모듈을 포함한 핵심 모듈 로드
- java.base, java.datatransfer, java.logging, java.rmi, java.naming
플랫폼 클래스 로더
- 기존의 확장 클래스 로더를 대체
- JDK 모듈 로드
- java.compiler, java.se, java.sql, java.xml, jdk.accessibility
애플리케이션 클래스 로더
- 사용자 애플리케이션의 jar 파일 및 클래스 로드
- 의존성이 요구됨
- jdk.aot, jdk.hotspot.agent, jdk.internal.ed
'Java' 카테고리의 다른 글
[JVM 밑바닥까지 파헤치기] 8-2. 바이트코드 실행 엔진: 바이트코드 해석 (0) | 2024.12.24 |
---|---|
[JVM 밑바닥까지 파헤치기] 8-1. 바이트코드 실행 엔진: 런타임 (0) | 2024.12.24 |
[JVM 밑바닥까지 파헤치기] 7-2. 클래스 로딩 매커니즘: 클래스 로더 (0) | 2024.12.23 |
[JVM 밑바닥까지 파헤치기] 7-1. 클래스 로딩 매커니즘: 클래스 로딩 처리 과정 (3) | 2024.12.23 |
[JVM 밑바닥까지 파헤치기] 6-2. 클래스 파일 구조: 바이트코드 명령어 (2) | 2024.12.22 |