본문 바로가기
JAVA&스프링

JAVA 클래스 로더(Class loader) 및 로딩 과정

by 개발고구마 2025. 6. 13.

클래스 로더

이름을 알고 있는 특정 클래스에 대한 정의를 가져오는 역할을 수행

- 부트스트랩 클래스 로더(H/W 수준)

    JVM에서 라이브러리로 취급되는 것들을 로드

- 플랫폼(S/W - H/W) 클래스 로더(기존 - 확장 클래스 로더)

    클래스 라이브러리 로드(개념상 하드웨어, 어플리케이션 중간의 것들이 로드)

- 애플리케이션 클래스 로더

    user mode 수준

 

JAVA 클래스 로딩

- 클래스 로딩 및 링킹 과정이 모두 *런타임*에 이루어짐

- 실행 성능이 일부 저하될 수 있으나 높은 확장성과 유연성을 제공하는 근간

    인터페이스만 맞으면 런타임에 구현 클래스를 경정하지 않을 수 있음

    클래스 로더는 실행할 프로그램 코드를 네트워크로 수신하는 것도 가능(확장성의 측면에서 엄청남 배포, 업데이트)

- 해석(Resolution) 단계는 동적 바인딩을 지원할 목적으로 초기화 후로 지연될 수 있음

     연산 여부에 따라 필요한 파일만 로딩할 수 있음(런타임 바인딩을 늦게 하겠다)

 

Loading

   Linking ( Verification , Prearation , Resolution) - 사용 준비(JVM)

     Using(Initialization , Using) - 사용(new연산) (생성자 호출 ...)

        Unloading (JVM) - GC

 

준비 및 해석

- java.lang.Class 인스턴스(메타 데이터)가 힙 영역에 생성되고 클래스 변수(정적 멤버) 메모리를 0으로 초기화

- 생성자 호출 전 상태(new 연산 전)

 

Heap 영역에 객체 생성

- JVM은 객체 저장을 위한 메모리 공간을 확보 후 0으로 초기화

- 객체 초기화를 위한 구성설정 실시

- 생성자 호출