클래스 로더는 JVM에 자바 클래스를 동적으로 로드하는 역할을 수행합니다.

종류

부트스트랩 클래스로더

  • JVM 시작 시 가장 최초로 실행되는 클래스 로더
  • 최소한의 자바 클래스만 로드

플랫폼 클래스로더

  • JDK의 모듈 시스템에서 플랫폼 별 확장 자바 클래스를 불러온다
  • 부트 스트랩 클래스 로더를 부모로 갖는다

애플리케이션 클래스 로더

  • 클래스는 환경 변수 CLASSPATH, -classpath 또는 -cp 명령줄 옵션으로 지정된 디렉터리에서 로드
  • 플랫폼 클래스로더를 부모로 가진다

동작과정

클래스 로더에는 로딩, 링킹, 초기화 단계로 나뉜다.

로딩

자바 바이트 코드를 메서드 영역에 저장 각 자바 바이트 코드는 JVM에 의해 메서드 영역에 다음 정보들을 저장한다.

  • 로드된 클래스를 비롯한 그의 부모 클래스 정보
  • 클래스 파일이나 Class, Interface, Enum의 관련 여부
  • 변수나 메소드 등의 정보

링크

  • 검증: 읽어 들인 클래스가 자바 언어 명세 및 JVM 명세에 명시된 대로 잘 구성되어 있는지 검사
  • 준비: 클래스가 필요로 하는 메모리를 할당하고, 클래스에서 정의된 필드, 메소드, 인터페이스를 나타내는 데이터 구조를 준비한다.
  • 분석: 심볼릭 메모리 레퍼런스를 메소드 영역에 있는 실제 레퍼런스로 교체한다.

초기화

정적 변수에 실제 값을 할당하고 클래스에 정의된 정적 블록을 실행