728x90

JVM의 클래스로더에 대해 조금 더 자세히 정리하려고 한다


JVM에서의 클래스 로더(Class Loader)의 역할

  • JAVA 컴파일러(javac)를 통해 변환된 Class 파일(바이트 코드)을 읽어서 메모리에 배치

클래스 로더 실행 순서

  • 실행 순서는 로딩, 링크, 초기화 순으로 이루어 진다

Class Loader System - <출처 : 더 자바, 코드를 조작하는 다양한 방법 - 백기선>


로딩(Loading)

  • .class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 만들고 메소드 영역에 저장
  • 메소드 영역에 저장하는 데이터 종류
    • Class
    • Interface
    • Enum
    • FQCN(Fully Qualified Class Name)
      (object, 함수, 변수의 계층적 구조를 모두 포함하여 표현하는 것. Java의 경우 클래스가 포함된 패키지를 의미함)
String str = new String();

// FQCN
java.lang.String str = new java.lang.String();
  • 로딩이 끝나면 해당 클래스 타입의 Class 객체를 생성하여 힙 영역에 저장

링크(Link)

Verify, Prepare, Reolve(optional) 세 단계로 이루어짐
  1. Verify
    • class 파일 형식이 유효한지 체크
  2. Preparation
    • 클래스 변수(static 변수)와 기본값에 필요한 메모리 할당
  3. Resolve
    • 심볼릭 메모리 레퍼런스를 메소드 영역에 있는 실제 레퍼런스로 교체

초기화(Initialization)

  • Static 변수의 값을 할당 (static 블럭이 있다면 이때 실행됨)

클래스 로더의 종류

  1. Bootstrap Class Loader
    • JAVA_HOME\lib에 있는 코어 자바 API를 제공. 최상위 우선순위를 가진 클래스 로더
  2. Platform Class Loader (Extension Class Loader)
    • JAVA_HOME\lib\ext 폴더 또는 java.ext.dirs 시스템 변수에 해당하는 위치에 있는 클래스를 읽음
  3. Application Class Loader
    • -classpath 옵션 또는 java.class.path 환경 변수의 값에 해당하는 위치에 있는 클래스를 읽음
728x90

'개발 지식 > JAVA 기본 지식' 카테고리의 다른 글

JavaBeans  (0) 2022.01.25
POJO(Plain Old Java Object)  (0) 2022.01.24
OOP(Object Oriented Programming 객체 프로그래밍) 정리  (0) 2022.01.24
매번 까먹는 JVM 정리  (0) 2022.01.22
복사했습니다!