클래스 로더는 로딩, 링크, 초기화 순으로 진행됩니다.
클래스 로더가 .class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 만들고 "메소드" 영역에 저장합니다.
이 때 메소드 영역에 저장하는 데이터는 다음과 같습니다.
로딩이 끝나면 해당 클래스 타입의 Class 객체를 생성하여 "힙" 영역에 저장합니다.
로딩을 할 때 세 가지 클래스 로더가 있습니다.
JAVA_HOME\lib
에 있는 코어 자바 API를 제공합니다.JAVA_HOME\lib\ext
폴더 또는 java.ext.dirs
시스템 변수에 해당하는 위치에 있는 클래스를 읽습니다.-classpath
옵션 또는 java.class.path
환경 변수의 값에 해당하는 위치)에서 클래스를 읽습니다.ClassLoader.java를 살펴보면
java.class.path
와 jdk.module.main
에서 값을 가져와서 해당 class path에서 class를 읽어옵니다.링크 과정도 크게 Verify, Prepare, Resolve 세 가지 과정으로 나눌 수 있습니다.
static 변수의 값을 할당합니다. static 블럭이 있다면 이 초기화 과정에서 실행됩니다.