Untitled

Java Class는 런타임 시 필요할 때 동적으로 로드된다. 컴파일러에 의해 컴파일된 바이트코드(class 파일)를 Class Loader Subsystem이 메모리에 로드한다.

Untitled

로딩 (loading)

.class 파일을 읽어 내용에 따라 적절한 바이너리 데이터를 생성하고, Method 영역에 저장

JVM이 런타임 시 필요한 클래스를 요청할 때, ClassLoader는 적절한 클래스를 찾고 정규화된 이름을 사용해서 로드한다.

ClassLoader.loadClass() 는 런타임 시 클래스를 로드할 책임이 있다.

JVM은 Application ClassLoader(가장 하위의 자식 ClassLoader)에게 최초 요청을 보낸다.

클래스가 아직 로드되지 않았다면, 상위(부모) ClassLoader에게 책임을 위임한다.

Application ClassLoader → Extension ClassLoader → Bootstrap ClassLoader

만약 부모 ClassLoader에서도 클래스를 로드하지 못한다면, 다시 자식 ClassLoader에게 위임한다. (재귀)

자식 ClassLoader는 java.net.URLClassLoader.findClass() 를 호출해서 파일 시스템 자체에서 클래스를 찾는다.

마지막 자식 ClassLoader도 클래스를 찾지 못한다면, ClassNotFoundException 또는 NoClassDefFoundError 가 발생한다.