Java 클래스 로더

Android Chen·2022년 4월 5일

자바 컴파일 과정

  1. 자바 코드를 자바 컴파일러가 바이트코드로 변환한다.

  2. 변환된 바이트코드를 JVM내의 자바 클래스로더가 런타임 메모리 영역에 올린다.

  3. JVM내의 실행 엔진(Execution Engine)이 이 코드를 실행한다.

  4. 실행중 필요한 클래스가 있다면 실행엔진이 클래스로더에게 요청하고 클래스로더가 클래스를 불러온다.

Class Load 과정

  • 클래스 로드는 크게 3가지 단계로 나눌 수 있다.
  1. 로딩
  • 클래스를 가져와서 메모리에 로드한다.
  1. 링킹

  2. 초기화

  • 클래스 안의 Static 변수를 할당하고 초기화한다.

  • 이때 링킹단계는 또 크게 3가지로 나눌 수 있다.

  • 검증 : 바이트코드가 자바의 규칙을 따르고 있는지 검증하는 단계

  • 준비 : 클래스가 필요로 하는 메모리를 미리 할당하는 단계

  • 분석 : 클래스가 참조하는 객체에 실제 메모리값을 대입하는 단계

메모리에 없는 클래스 요청 시 발생하는 일

  • 크게 3가지 단계로 이루어진다.
  1. 캐시 : 이전에 로드되었던 클래스인지 캐시에서 확인한다.

  2. 상위 : 상위 클래스로더에서 로드되었던 클래스인지 확인한다.

  3. 본인 : 본인, 하위클래스로더에서 클래스를 로드한다.

클래스로더 계층

  • 상위 계층부터 아래와 같이 존재한다.

  • Bootstrap Class Loader : JVM이 실행되면 맨 처음 실행되는 클래스로더로 자바의 기본적인 클래스를 로드한다.

  • Extension Class Loader : 기본적인 클래스에서 확장된 클래스들을 로드한다.

  • System Class Loader : classpath라는 옵션에 주어진 클래스들을 로드한다.

  • 사용자 정의 클래스로더 : 사용자가 직접 정의한 클래스로더이다.

profile
https://github.com/Userz1-redd

0개의 댓글