답안

  1. 클래스 로더는 Java code가 컴파일된 .class 파일을 JVM으로 처음 로드하여, 컴퓨터가 JVM의 실행하기 직전 준비를 진행하는 녀석입니다. 클래스 로더는 각각 3가지 단계( 로딩, 링크, 초기화 )를 진행합니다.
  2. 로딩은 클래스 파일을 Method Area에 저장하는 단계인데, 이 중 Static 변수와 초기값 Method Area에 저장한다. ( Static 핵심입니다. 없으면 오답 )
  3. 링크는 클래스 파일 사용전 검증하느 과정인데, 검증/준비/분석 단계를 진행합니다.
  4. 초기화는 static 변수와 staic block의 실행을 수행합니다. (참고: 이 초기화 단계는 코드에서 클래스가 처음 사용될 때 실행됩니다. )
  5. JVM 실행엔진은 실제 바이트 코드를 수행하는 역할을 진행하는 것입니다. 인터프리터가 바이트 코드를 한 줄씩 해석하여 컴퓨터가 실행하게 합니다. ( 실시간 통역 ) JIT 컴파일러는 빈번하게 사용되는 코드를 식별하여 기계어로 변환하여 실행합니다. ( 메모 )
  6. Java 코드 실행하다보면 heap 영역에 더 이상 쓰이지 않는(= Unreable 상태) 객체가 나타납니다. JVM 내부 GC는 이 객체를 주기적으로 없애서 Heap 사용을 최적화하려 합니다. GC 는 이 unreachable 객체들을 Mark-Sweep-Compaction 순서로 청소합니다. 이 과정에서 가끔씩 넓은 영역인 Old Generation을 청소할 때가 있습니다. 이걸 Major GC라고 부르며, 이 Major GC가 일어날 때 Java의 Thread 동작이 일시정지하여 짧은시간 Java 애플리케이션이 느려지게 되는 ”STOP_THE_WORLD” 현상이 일어납니다.

Untitled

해설