Java - 클래스 로더

itonse·2024년 7월 31일
0

JAVA

목록 보기
13/19

클래스 로더는 자바에서 클래스를 동적으로 로드하는 역할을 하는 부분입니다.

클래스 로딩 단계 설명

자바의 클래스 로딩은 크게 로딩(Loading), 링크(Linking), 초기화(Initialization) 세 단계로 이루어집니다.

  1. 로딩(Loading):
    • 자바 바이트 코드(.class)를 JVM의 메모리의 메서드 영역(Method Area)에 저장합니다.
    • 이 과정에서 클래스 정보, 부모 클래스 정보, 변수 및 메서드 정보를 포함한 메타데이터가 저장됩니다.
  2. 링크(Linking):
    • 검증(Verification): 클래스 파일이 자바 언어 명세 및 JVM 명세에 맞게 구성되었는지 검사합니다.
    • 준비(Preparation): 클래스 변수(static 변수)를 위한 메모리를 할당하고, 기본값으로 초기화합니다.
    • 해석(Resolution): 심볼릭 레퍼런스를 다이렉트 레퍼런스로 변경합니다.
  3. 초기화(Initialization):
    • static 변수를 실제 값으로 초기화합니다. (이 과정에서 static 블록 실행)

클래스 로더의 종류

클래스 로더는 클래스 로딩 과정에서 중요한 역할을 합니다. 자바에는 세 종류의 클래스 로더가 있습니다.

  1. 부트스트랩 클래스 로더(Bootstrap Class Loader)
    • JVM 시작 시 가장 먼저 실행되는 클래스 로더입니다.
    • java.lang.Object, java.lang.Class, java.util.* 등의 기본 자바 클래스를 로드합니다.
  2. 확장 클래스 로더(Extension Class Loader)
    • 확장 자바 라이브러리를 로드합니다. 주로 $JAVA_HOME/jar/lib/ext 디렉토리에 있는 클래스를 로드합니다.
  3. 애플리케이션 클래스 로더(Application Class Loader)(=System ClassLoader)
    • 개발자가 작성한 애플리케이션의 클래스를 로드합니다. 보통 클래스패스에 지정된 디렉토리나 JAR 파일에서 클래스를 로드합니다.

클래스 로딩의 동적 특성

자바는 동적 로드의 특징을 가지고 있어, 컴파일 타임이 아닌 런타임에 클래스를 링크하고 로드합니다. 이는 클래스 참조 시점에 필요한 클래스를 메서드 영역에 로드하여, 모든 클래스를 미리 로드하지 않음으로써 메모리 사용을 최적화할 수 있습니다.



내용 정리

클래스 로더란?

클래스 로더 는 자바에서 클래스를 동적으로 로드하는 역할을 합니다. 프로그램이 실행되는 동안 필요한 클래스를 찾아 메모리에 올립니다. 이를 통해 자바는 필요한 시점에만 클래스를 로드하여 메모리를 효율적으로 사용합니다.

클래스 로딩의 단계

클래스 로딩은 로딩, 링킹, 초기화 3 단계를 거칩니다.

로딩 단계에서는 java.lang.Object, java.lang.Class 같은 기본 자바클래스 정보JVM 메모리의 메서드 영역에 저장을 하고,
링킹 단계에서는 클래스 파일 검증 및 메모리 할당 등이 일어나고
초기화 단계에서는 static 변수와 블록을 실제 값으로 초기화 하는 과정이 일어납니다.

클래스 로더의 종류

JVM에는 여러 종류의 클래스 로더가 있는데,

부트스트랩 클래스 로더기본 자바 클래스를,
확장 클래스 로더확장 라이브러리 클래스를,
그리고 애플리케이션 클래스 로더우리가 만든 .class 를 이렇게 각각 담당해서 로드합니다.


ref.
https://velog.io/@ddangle/Java-클래스-로더란
JAVA-Java의-클래스-로딩

0개의 댓글

관련 채용 정보