본문 바로가기

JVM

Java 클래스 로딩 과정

 

1. 클래스 파일 파싱(Class Format Check)

먼저 클래스 포맷이 올바른지 확인합니다. 잘못된 경우에는 `ClassFormatError`가 발생합니다.

 

 

2. 클래스 생성 (Creation of Class)

다음으로는 클래스의 런타임 representation을 JVM 메모리 영역에 생성합니다. 이 메모리 영역은 Method Area의 `runtime constant pool`으로, `Meta Space` 또는 `Permanent Generation`이라고도 합니다.

 

 

3. 링킹 (Linking)

자바 바이트 코드 유효성 검사 (Java bytecode verification) 후, Java bytecode에 있는 상징적인 레퍼런스들의 Resolution (Resolution of symbolic references)이 필요합니다. 즉 한 클래스의 다른 클래스의 메소드나 필드에 대한 참조는 참조하고자 하는 대상의 이름만으로 이루어져 있어 (즉, ‘symbolic’ 하기 때문에) 이 reference를 런타임에 메모리상에서 실제로 존재하는 물리적인 주소로 대체하는 과정(resolving)이 필요하다는 뜻입니다. 이러한 링크 작업은 필요할 때마다 동적으로 이루어지기 때문에 Dynamic Linking이라고 합니다. Dynamic Linking은 객체 지향과 함께 Java라는 언어를 생산적이고 동적으로 만들어주는 가장 중요한 기술 중 하나입니다.

 

 

4. 초기화 (Initialization)

각 클래스의 초기화는 new 연산자로 새로 생성될 때, 혹은 static field access 할 때, static method call될 때 이루어집니다.

 

 


 

 

참고자료