<aside>

JVM 시리즈

  1. 왜 JVM을 알아야 할까 (+ JVM 구조 한눈에 보기)
  2. JVM의 메모리 - Runtime Data Area
  3. Class Loader와 부모 위임 원칙
  4. 실행 엔진: 인터프리터와 JIT 컴파일러
  5. Garbage Collection
  6. GC 튜닝
  7. 가짜 JVM 만들어보기 </aside>

<aside>

자바 코드를 작성하고 실행하면, 당연하다는 듯 main()이 실행된다.

하지만 그 전에 JVM은 과연 무슨 일을 하고 있을까?

클래스를 ‘불러오는’ 일은 우리가 직접 신경 쓰지 않아도 JVM이 알아서 해준다

그런데 이 과정은 단순히 "파일을 메모리에 올리는 것"이 아니다.

JVM은 놀라울 정도로 체계적인 절차를 거쳐 클래스를 메모리에 적재하고,

클래스 로더(ClassLoader) 라는 특수한 객체가 이 모든 일을 조율한다

특히 JVM의 클래스 로딩에는 중요한 철칙이 하나 있다

바로, 부모에게 먼저 물어보는 것 — 이것이 바로 **부모 위임 모델(Parent Delegation Model)**이다

이번 JVM 시리즈 3편에서는

하나씩 차근히 들여다보려 한다

</aside>

클래스가 메모리에 적재되는 과정

▶ 클래스 로딩의 세 단계

image.png

  1. Loading: 바이너리 데이터를 읽어 Class 객체로 만듦
  2. Linking: 메타정보 연결
  3. Initialization: static 블록 실행, static 변수 초기화

ClassLoader의 종류와 역할

JVM이 사용하는 클래스 로더는 계층적으로 구성돼 있음

클래스 로더 역할 로딩 위치
Bootstrap 최상위 클래스 로더 rt.jar 등 JVM 핵심 클래스
Extension 확장 기능 로더 $JAVA_HOME/lib/ext
Application 우리가 작성한 코드 로더 classpath (ex: /bin, /target/classes)

부모 위임 모델의 동작 원리