2024/12/23 3

[JVM 밑바닥까지 파헤치기] 7-3. 클래스 로딩 매커니즘: 자바 모듈 시스템

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다1. JPMSJava 9에서 도입된 모듈 시스템자유롭게 설정 가능한 캡슐화 격리 매커니즘모듈 경계를 통해 각 모듈이 서로의 내부를 참조하지 못함기존의 클래스패스에 의존한 안정성 문제를 해결의존성이 실제 존재하는지는 런타임에서 확인되었음컴파일 타임에서 의존성 체크 후 실행 (모듈간의 의존성이 먼저 정의되어 있음) 모듈 정의module-info.java경계 정의 구성requires: 수입하는 모듈 목록exports: 내보내는 모듈 목록uses: 수입하는 서비스 목록provides: 내보내는 서비스 목록open: 내보내는 리플렉션 API 목록 모듈 호환성모듈 패스모듈 시스템에서 모듈이 위치하는 경로기존 클래스패스 방식과 호환되도록 도입된 방..

Java 2024.12.23

[JVM 밑바닥까지 파헤치기] 7-2. 클래스 로딩 매커니즘: 클래스 로더

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다 가상 머신 외부에서 다양한 방식으로 바이트 스트림을 로드하도록 하는 방법 1. 독립적인 공간같은 클래스 로더로 로딩되어야 동치 관계의 클래스라 판단함 2. 부모 위임 모델상위 클래스 로더에게 위임처음부터 클래스 로드 시도 X자신의 차례가 와서야 하위 클래스 로더가 로드 시도 접근 제한자식 클래스 로더는 부모 클래스 로더에서 로드된 클래스를 접근할 수 있음부모 클래스 로더는 자식 클래스 로더에서 로드한 클래스를 접근할 수 없음 구조부트스트랩 클래스 로더JVM 내장JAVA_HOME/lib or -XbootclasspathClass Lib 확장 클래스 로더JVM 외부에 독립적으로 존재java.lang.ClassLoader를 확장 (sun...

Java 2024.12.23

[JVM 밑바닥까지 파헤치기] 7-1. 클래스 로딩 매커니즘: 클래스 로딩 처리 과정

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다 0. 동적 로딩클래스가 필요할 때 클래스가 jvm에 동적으로 로드됨자바는 런타임에 클래스 로딩, 링킹, 초기화가 이루어짐 장점높은 확장성, 유연성런타임에 클래스를 동적으로 교체 가능네트워크나 외부 소스에서 클래스파일을 가져와 쓸 수 있음JSP, OSGi런타입 바인딩 지원 단점성능 떨어짐 1. Loading특징클래스 로더 사용부트스트랩 클래스 로드 (JVM 내장)사용자 클래스 로더로드 방법 재정의 가능: ClassLoader의 findClass() or loadClass() 오버라이딩배열 클래스는 해당 없음JVM이 직접 메모리에 동적으로 생성클래스 로더가 생성 X 과정클래스를 정의하는 바이트 스트림을 가져옴여러 형식 지원ZIP, DB,..

Java 2024.12.23