<aside>
</aside>
JVM은 클래스 로더(Class Loader SubSystem), 런타임 데이터 영역(Runtime Data Area), 실행 엔진(Execution Engine), 가비지 컬렉터(Garbage Collector)로 이루어져 있습니다.
클래스 로더 시스템은 컴파일된 바이트 코드들을 읽어 연결한 뒤 메모리에 저장하는 역할을 수행합니다. 내부적으로는 로딩, 링크, 초기화의 단계가 존재하는데, 컴파일 타임이 아닌 런타임 시 맨 처음 클래스를 참조하는 시점(동적 로딩)에 수행하게 됩니다.
참조되는 시점에서 필요한 클래스 파일을 찾아 메모리에 로드합니다. 필요한 파일을 파일 시스템, Jar 파일, 네트워크 등에서 찾아옵니다.
로드된 클래스 파일의 바이트 코드가 다음 3가지 과정으로 바이트 코드를 기계어로 변환할 준비를 합니다.
<aside>
클래스 로딩의 마지막 단계로, 모든 정적 변수는 원래 값으로 할당되고 정적 블록이 실행됩니다. static 키워드의 사용이 이 시점에 실행되고 할당됩니다.