클래스 로더는 자바에서 클래스를 동적으로 로드하는 역할을 하는 부분입니다.
자바의 클래스 로딩은 크게 로딩(Loading), 링크(Linking), 초기화(Initialization) 세 단계로 이루어집니다.
클래스 로더는 클래스 로딩 과정에서 중요한 역할을 합니다. 자바에는 세 종류의 클래스 로더가 있습니다.
java.lang.Object
, java.lang.Class
, java.util.*
등의 기본 자바 클래스를 로드합니다.$JAVA_HOME/jar/lib/ext
디렉토리에 있는 클래스를 로드합니다.자바는 동적 로드의 특징을 가지고 있어, 컴파일 타임이 아닌 런타임에 클래스를 링크하고 로드합니다. 이는 클래스 참조 시점에 필요한 클래스를 메서드 영역에 로드하여, 모든 클래스를 미리 로드하지 않음으로써 메모리 사용을 최적화할 수 있습니다.
클래스 로더
는 자바에서 클래스를 동적으로 로드하는 역할을 합니다. 프로그램이 실행되는 동안 필요한 클래스를 찾아 메모리에 올립니다. 이를 통해 자바는 필요한 시점에만 클래스를 로드하여 메모리를 효율적으로 사용합니다.
클래스 로딩은 로딩, 링킹, 초기화 3 단계를 거칩니다.
로딩
단계에서는 java.lang.Object
, java.lang.Class 같은 기본 자바
클래스 정보를 JVM 메모리의 메서드 영역에 저장을 하고,
링킹
단계에서는 클래스 파일 검증 및 메모리 할당 등이 일어나고
초기화
단계에서는 static 변수와 블록을 실제 값으로 초기화 하는 과정이 일어납니다.
JVM에는 여러 종류의 클래스 로더가 있는데,
부트스트랩 클래스 로더
는 기본 자바 클래스를,
확장 클래스 로더
는 확장 라이브러리 클래스를,
그리고 애플리케이션 클래스 로더
는 우리가 만든 .class 를 이렇게 각각 담당해서 로드합니다.
ref.
https://velog.io/@ddangle/Java-클래스-로더란
JAVA-Java의-클래스-로딩