본문 바로가기

CS/OOP

Java Class Loader 알아보기

반응형
Class Loader 알아보기

 

 

Class Loader란?

 Java Virtual Machine (JVM)에서 클래스 파일을 로드하는 역할을 담당하는 구성 요소이다.

 

Class Loader 로딩

Class Loader는 클래스 파일을 찾아 JVM으로 로드하는 역할을 합니다. 클래스 로딩은 필요한 클래스 파일을 찾고 메모리로 읽어오는 과정입니다. 이 과정에서 클래스 파일의 유효성을 검사하고, 필요한 경우 해당 클래스 파일을 컴파일합니다.

  • 부트스트랩 클래스 로더 - JAVA_HOME\lid에 있는 코어 자바 API 제동 (최상위 우선순위를 가짐)
  • 확장(Extension) 클래스 로더: 부트스트랩 로더의 하위 클래스로, JVM의 확장 클래스들을 로드한다. JVM 실행 시점에 로드되며, JVM 내부의 ext 디렉토리(JAVA_HOMElid\ext or java.ext.dirs) 에 위치한 클래스들을 읽는다.
  • 애플리케이션(Application) 클래스 로더 - 애플리케이션 개발자가 작성한 클래스들을 로드한다. 애플리케이션 클래스패스(애플리케이션 실행할 때 주는 -classpath 옵션 또는 java.class.path 환경 변수의 값에 해당아는 위치)에서 클래스를 읽는다. 사용자 정의 클래스 로더를 생성하여 추가적인 로딩 메커니즘을 구현할 수도 있다.

Class Loader 보는 방법

public class Test{
	public static void main(String[] args) {
    	ClassLoader classLoader = Test.class.getClassLoader();
        System.out.println(classLoader);
        System.out.println(classLoader.getParent());
        System.out.println(classLoader.getParent().getParent());
     }
}

결과

jdk.internal.loader.ClassLoaders$AppClassLoader@251a69d7
jdk.internal.loader.ClassLoaders$PlatformClassLoader@36baf30c
null

ClassLoader관련 오류가 발생하는 경우

의존성 주입을 하지 않은 상태에서 사용을 하는 경우에 ClassNotFoundException 오류가 발생하는 것을 알 수 있다.

 

 

Class Loader 링크란?

로딩된 클래스 파일은 링크 과정을 거쳐 JVM의 런타임 데이터 영역에 배치한다.

  • Verify - .class 파일 형식의 유효성을 확인한다.
  • Prepare -  클래스 변수(static 변수)와 기본값에 필요한 메모리를 확인한다. 
  • Resolv - 심볼릭 메모리 레퍼런스를 메소드 영역에 있는 실제 레퍼런스로 교체한다. (Optional) 

 

초기화

클래스의 정적 필드 및 정적 블록을 초기화한다.(Static 변수의 값도 항당) 클래스의 초기화는 해당 클래스가 처음으로 사용될 때 수행되며, 필요한 리소스를 초기화하고 정적 코드 블록을 실행하는 등의 작업을 수행한다. 

 

반응형

'CS > OOP' 카테고리의 다른 글

JVM Multi Thread  (0) 2022.11.17
GC(garbage collection) 알아보기  (0) 2022.10.11
JVM이란 무엇일가?  (3) 2022.10.04
Java Array와 List 차이 알아보기  (0) 2022.09.16
JDK 와 JRE 그리고 JVM 알아보기  (3) 2022.09.11