Java 클래스 로더

Android Chen·2022년 4월 5일
0

자바 컴파일 과정

  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개의 댓글