JVM Garbage Collector

.·2021년 8월 21일
0
  • Garbage
    - 주소를 잃어버려서 더 이상 사용할 수 없게 된 메모리.
    - 앞으로 사용하지 않으면서 메모리를 할당 받고 있는 객체.

  • Garbage Collector(GC)
    - 동적으로 할당한 메모리 영역 중 사용하지 않는 영역을 탐지하여 정리해주는 프로그램.

    Heap : 동적으로 할당한 메모리 영역. 모든 Object 타입의 데이터가 할당. Heap 영역의 Object를 가리키는 참조 변수가 Stack.에 할당.
    stack : 정적으로 할당한 메모리 영역. 원시 타입의 데이터가 값과 함께 할당, Heap 영역에 생성된 Object 타입의 데이터의 참조값 할당.
    
    - 메소드가 종료 될 때, Stack에 참조되는 Heap이 없을때 그 Object는 unreachable 상태가 된다.
  • JVM(Java Virtual Machine)
    - 운영체제의 메모리 영역에 접근하여 메모리를 관리하는 프로그램.
    - 메모리관리, GC 수행.

  • GC의 과정
    1. GC가 Stack의 모든 변수를 스캔하면서 각각 어떤 객체를 참조하고 있는지 찾아서 마킹(Mark)
    2. Rechable Object가 참조하고 있는 객체도 찾아서 마킹.(Mark)
    3. 마킹되지 않은 객체를 Heap에서 제거(Sweep)

  • Heap
    - New Generation, Old Generation 영역으로 나뉨.

    • 새롭게 생성되는 객체는 Eden영역에서 생성.
    • Eden영역이 가득차면 Minor gc가 실행되면서 Rechable 객체를 survivor0 영역으로 이동시킨다.
    • survivor0 영역부터는 age라는 값을 가지면서 얼마나 survivor 영역에 있었는지 측정하는 척도가 된다.
    • survivor 0 영역도 가득차면 survivor 1로 이동시키기 위한 minor gc가 실행.
    • minor GC가 실행되면 survivor 0 또는 survivor 1로 객체들이 관리된다. 즉, 한 공간을 사용하면 다른 공간은 비어있는 상태가 된다.
    • survivor 1에서 살아남은 객체가 어느 age값에 도달하게 되면 old generation으로 이동하는 minor gc가 실행된다.
    • old generation이 가득차게 되면 이때 major gc가 실행.
  • Stop the World.
    - GC를 실행하기 위해 JVM이 앱 실행을 멈추는것.

    • GC관련 스레드를 제외한 모드 스레드의 동작이 중단.
    • GC튜닝은 Stop the World의 시간을 줄이는 것을 말함.
profile
.

0개의 댓글