Skip to content

고동훤, 김현욱, 김현종, 최현식 JVM

Dr-KoKo edited this page Jul 10, 2024 · 10 revisions

ClassLoader

특정 클래스를 활용해야하는 시점에 해당 클래스를 동적으로 로딩함

1. Loading

  • Bootstrap Class Loader
    • JRE의 핵심 클래스 로딩 (예: rt.jar)
      • 기본적으로 JVM 자체에 포함되어 있으며, rt.jar 파일 등과 같은 핵심 java 클래스를 로드
      • 부트스트랩 클래스로더는 Native 코드로 작성되었기 때문에 자바 내에서는 null로 표기됨
    • 예. ArrayList.class.getClassLoader()
  • Extension Class Loader
    • 확장 클래스 로딩 (예: javax 패키지)
      • 표준 핵심 Java 클래스의 확장 클래스를 로드
    • 예. DriverManager.class.getClassLoader()
  • Application Class Loader
    • 애플리케이션 클래스 로딩
      • 어플리케이션 레벨의 클래스(예를 들어 우리가 작성한 클래스)를 JVM에 로드
    • 예. HttpRequest.class.getClassLoader()

2. Linking

  • Verify
    • 파일 형식이 올바른지 확인 (예: Magic number 0xCAFEBABE 확인)
    • 변수 및 메서드가 올바른 타입을 가지고 있는지
  • Prepare
    • 클래스의 모든 정적 변수를 위한 메모리 할당
    • 해당 타입의 "기본값으로" 초기화
  • Resolve
    • 심볼릭 레퍼런스(ex. 클래스 이름, 메서드 이름)를 실제 메모리 레퍼런스로 변환

3. Initialization

  • static 변수 초기화
  • static block 실행

Runtime Data Area

Method Area

Heap

Stack

PC register

Native Method Stack


Execution Engine

Interpreter

JIT Compiler

  • 자주 사용되는 코드에 대해 네이티브 코드로 최적화하고 해당 값을 캐싱하여 활용하게 도와주는 컴파일러
  • JIT 컴파일러의 캐시 히트율은 90% 이상으로 성능 향상에 큰 도움
  • '자주 사용되는'의 기준은 프로파일러가 프로파일링을 하며 최적화 여부를 판단 (얼마나 자주, 어디에서 호출되는지)

GC Algorithm

  1. mark & sweep : 객체를 마크(mark)한 후, 사용되지 않는 객체를 스윕(sweep)하여 메모리를 해제합니다.
  2. copy : 메모리를 두 개의 공간으로 나누고, 하나의 공간에서 사용 중인 객체를 다른 공간으로 복사하여 살아 있는 객체만 남깁니다.
  3. mark & compact : 객체를 마크(mark)한 후, 모든 살아 있는 객체를 한쪽으로 압축(compact)하여 메모리 단편화를 줄입니다.

Garbage Collector 종류

  1. Serial : Single-threaded GC. 작은 힙 영역에 적합하며, 모든 GC 작업을 단일 스레드에서 처리합니다.
  2. Parallel : Multi-threaded GC. 여러 스레드를 사용하여 GC 작업을 병렬로 수행합니다.
  3. CMS(Concurrent Mark-Sweep) : Mark-Sweep 알고리즘을 기반으로 한 GC. 애플리케이션 스레드와 병행하여 작동하며, Stop-The-World 시간을 줄입니다.
  4. G1 (Garbage First) : 힙을 여러 영역으로 나누어 병렬로 GC를 수행합니다. 예측 가능한 GC 시간을 목표로 합니다.
  5. ZGC (Z Garbage Collector) : 매우 낮은 Stop-The-World 시간을 목표로 하는 GC. 큰 힙 영역을 효율적으로 관리합니다.

minor gc vs major gc

  1. minor gc : : Young Generation에서 발생하는 GC. : 비교적 빠르게 수행되며, 주로 단기 생명 주기를 가지는 객체를 수집합니다.
  2. major gc : Old Generation에서 발생하는 GC. : Young Generation의 객체가 오래 살아남아 Old Generation으로 이동한 후에도 계속 살아남는 객체를 수집합니다. Major GC는 더 많은 시간을 소요할 수 있습니다.

stw(stop the world)

: Garbage Collection 과정에서 JVM이 애플리케이션 스레드를 일시 중지하고 GC 작업을 수행하는 상태를 말합니다. 힙 영역이 꽉 차면 GC(Minor or Major)가 발생하고, 이 때 STW가 일어납니다.
: 에덴동산이 꽉 차니 세상이 멈추더라

GC 동작 과정

  1. 새로운 객체들이 YG 의 eden 영역에 생성됨
  2. eden 영역이 가득차게되면 stw가 실행되며 minor gc가 실행됨.
  3. minor gc로 살아남은 객체들은 반대쪽 survival 영역으로 이동된 뒤 나머지 garbage는 해제됨
  4. survival 영역을 넘나들며 age bit가 증가하게되는데, 일정 age bit를 초과한 객체들은 OG 영역으로 이동됨
  5. stw가 해제됨
  6. OG 영역이 가득차게되면 stw 와 major gc가 실행됨.

출처

👼 개인 활동을 기록합시다.

개인 활동 페이지

🧑‍🧑‍🧒‍🧒 그룹 활동을 기록합시다.

그룹 활동 페이지

🎤 미니 세미나

미니 세미나

🤔 기술 블로그 활동

기술 블로그 활동

📚 도서를 추천해주세요

추천 도서 목록

🎸 기타

기타 유용한 학습 링크

Clone this wiki locally