클래스 로더

|
  • 자바8 기준으로 작성된 내용임을 밝힙니다.

  • 클래스 로더

1) Bootstrap or Primordial ClassLoader
- Bootstrap class loader는 모든 클래스 로더들의 최상위 클래스로더이며, core JVM의 일부로서 네이티브 코드로 구현되어 있다.
2) Extension ClassLoader - Bootstrap class loader의 자식 클래스 로더이며, core java class의 extensions를 로딩하는데 사용된다.
3) Application or System ClassLoader - Extension class loader의 자식 클래스 로더이며, 어플리케이션 레벨 클래스를 로딩( classpath에 존재하는 클래스) 하는 데 사용한다.

  • 클래스 로더의 특징

1) Deligation - 클래스 로딩과정은 Deligation Model을 따른다.
- Deligation Model은 클래스 로딩을 상위 클래스 로더에게 위임하는 것이다.

Application ClassLoader -> Extension ClassLoader -> Bootstrap ClassLoader로 위임되며 Bootstrap ClassLoader -> Extension ClassLoader -> Application ClassLoader 순으로 내려오며 클래스를 로딩한다.

2) Uniqueness

- 하위 클래스로더는 상위 클래스로더가 로딩한 클래스를 다시 로딩하지 않게 해서 로딩된 클래스의 유일성을 보장한다. <br>

3) Visibility - 하위 클래스로더는 상위 클래스로더가 로딩한 클래스를 볼 수 있지만, 상위 클래스로더는 하위 클래스로더가 로딩한 클래스를 볼 수 없다.
- 예를 들어 Bootstrap ClassLoader가 로딩한 rt.jar의 기본 클래스(Object,String,Long,Integer…)를 개발자가 만든 클래스를 로딩하는 Application ClassLoader에서 볼 수 없다면 애플리케이션이 제대로 동작하지 않을 것이다.

ref. https://docs.oracle.com/javase/8/docs/technotes/tools/windows/findingclasses.html#A101244
ref. https://www.baeldung.com/java-classloaders
ref. https://homoefficio.github.io/2018/10/13/Java-%ED%81%B4%EB%9E%98%EC%8A%A4%EB%A1%9C%EB%8D%94-%ED%9B%91%EC%96%B4%EB%B3%B4%EA%B8%B0/
ref. https://dev.vividbreeze.com/jvm-classloading/