- 로딩하는 과정에 여러개의 ClassLoader들이 부모 자식 관계를 맺고 로딩을 한다.
- 링크과정 또한 3단계로 나뉘어져서 순차적으로 진행이 된다.
- 최종적으로 초기화가 진행된다.
- 로딩, 링크, 초기화 순으로 진행된다.
- 제일 먼저 Application ClassLoader가 있다.
- Application ClassLoader의 부모로 Platform ClassLoader가 있다.
- BootStrap Class Loader는 Native코드로 되어있기 때문에 null값으로 표현된다.
- 어떤 Class를 읽어달라고 하면 제일 부모인 Bootstrap Class Loader에게 부탁한다.
- 만약 Bootstrap Class Loader가 읽어오지못하면 Platform Class Loader가 읽어오고 Platform Class Loader가 읽지 못하면 Application Class Loader가 읽어온다.
- 만약 Application Class Loader 또한 읽지 못한다면 ClassNotFoundException이 발생한다.
Verify, Prepare, Resolve(optional) 세 단계로 나뉘어져 있다.
Verify : .class 파일 형식이 유효한지 체크한다.
Prepare : 클래스 변수(static 변수)와 기본값에 필요한 메모리를 준비해두는 과정이다.
Resolve : 심볼릭 메모리 레퍼런스( Book book = new Book()
)를 메소드 영역에 있는 실제 레퍼런스로 교체한다. (Optional)
static String hello = "Hello";
static String name;
static {
name = "hyunsik"
}