Loding -> Linking -> Initializing
Loading
컴파일된 .class 파일을 읽음
바이너리 코드들을 읽어서 Method Area
에 저장함
- 패키지명, 클래스명을 저장
- 부모 클래스 정보도 저장
- class, interface, enum 여부를 저장
- 접근제어자, 변수, 메서드 정보 등 저장
힙메모리
에 Class 타입의 객체를 저장
Linking
Verification
- .class 파일이 제대로 된 클래스 파일인지를 검증
- ByteCodeVerifier라는 컴포넌트를 통해서 진행
- 이 단계를 거친 후 컴파일 준비가 완료됨
Preparation
- 클래스에 있는 static 변수들을 기본 값으로 메모리에 할당
Resolution
- 해당 타입의 Symbolic references (심볼릭 참조) 를 Direct references (직접 참조) 로 변경되는 엔티티들은 Method Area를 검색하여 수행
Initializing
- static 변수들의 값을 static 블록에서 선언한 값으로 지정
자바가 설치된 경로(JAVA_HOME)/jre/lib 에 있는 파일들을 로드
실행 엔진의 구성 3가지로 구성
Interpreter, JIT(just-in-time Compiler), GC(Garbage Collector)
Interpreter
- 바이트 코드를 라인 단위로 읽어서 번역하고 실행
- 반복되는 부분이 있어도 계속 번역 작업 수행
JIT
- interpereter를 효율적으로 활용하기 위해서 사용
- 모든 바이트 코드를 컴파일한 후 네이티브 코드로 변경
- interpreter 가 반복적인 메소드 호출이 있을 떄, JIT 에서 해당 부분에 대한 네이티브 코드를 제공
GC(garbage collector)
사용하지 않는 객체 정리