[Java] 클래스로더란?

자바에서 클래스 로더에 대해서 알아보자. java8 기준

자바 프로그램은 한개 혹은 그 이상의 클래스들의 조합으로 실행된다. 실행시 모든 클래스 파일이 한 번에 JVM 메모리에 로딩되지 않고 , 요청 순간 로딩된다. 자바의 클래스로더가 이런 역할을 수행함.

자바 프로그램의 실행 순서

자바가 동작하는 법

java에 3가지 기본 클래스 로더가 존재

Bootstrap class loader

※ rt.jar 파일이란?

rt는 RunTime를 의미한다. rt.jar는 코어 자바클래스(자바 런타임 환경에서)의 콜렉션이다. JVM에서 rt.jar파일에 담긴 클래스 파일들을 런타임시에 메모리에 올린다. 아무렇지 않게 사용했던 String 클래스, System 클래스 (System.out.println()) 같은 클래스가 rt.jar 안에 속해 있다.

Extension class loader

public class Main {
  public static void main(String args[]){
    System.out.println(System.getProperty("java.ext.dirs"));
  }
}


// console
/Users/andrew/Library/Java/Extensions:/usr/local/Cellar/adoptopenjdk-openjdk8/jdk8u172-b11/jre/lib/ext:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java

Application class loader

클래스 로더 동작에는 3가지 원칙

  1. 위임원칙: 클래스로딩 작업을 상위 클래스로더에 위임한다.
  2. 가시범위 원칙: 하위 클래스로더는 상위 클래스 로더가 로딩한 클래스를 볼 수 있지만, 상위 클래스 로더는 하위 클래스 로더가 로딩한 클래스를 볼 수 없다.
  3. 유일성 원칙: 하위 클래스로더는 상위 클래스 로더가 로딩한 클래스를 다시 로딩하지 않게 해서 로딩된 클래스의 유일성을 보장한다.

참고

연관 포스트