MATT's

JVM과 Garbage Collector 본문

CS

JVM과 Garbage Collector

matt5659 2022. 11. 2. 23:32

<JVM>

  • 운영체제의 메모리 영역에 접근하여 메모리를 관리하는 프로그램
  • 메모리 관리, Garbage Collect 수행

 

<Garbage Collector>

  • 동적으로 할당한 메모리 영역 중 사용하지 않는 영역을 탐지하여 해제하는 기능

<Stack>

  • 정적으로 할당한 메모리 영역
  • 원시 타입의 데이터가 값과 함께 할당
  • Heap 영역에 생성된 Object 타입의 데이터의 참조 값 할당

 

<Heap>

  • 동적으로 할당한 메모리 영역
  • Object 타입의 데이터가 할당됨
  • Heap 영역의 Object를 가리키는 참조 변수가 Stack에 할당

 

<Garbage Collection 과정>

  1. Garbage collector가 stack의 모든 변수를 스캔하면서 각각 어떤 객체(Object)를 참조하고 있는지 마킹
  2. Reachable Object가 참조하는 객체도 마킹
  3. 마킹되지 않은 객체를 Heap에서 제거 (Sweep)

* 이러한 과정을 Mark and Sweep이라고  함

 

<Garbage Collection이 발생하는 시점>

  • Heap은 “New Generation”, “Old Generation” 영역으로 나뉨
  • “New Generation”은 Eden, Survival0, Survival1으로 나뉨
  • 새로운 객체가 생성되면 eden에 저장되고, eden 영역이 가득차게 되면 Garbage collection이 발생됨 (이 때 발생되는 Garbage collection을 Minor GC라고 함)
  • Eden 영역에서 GC 이후에 Reachable 객체는 Survival0으로 옮겨지고, UnReachable 객체는 메모리에서 해제된다.
  • Survival0 영역이 가득차게 되면 GC가 발생되고, Survival0 영역에서 살아남은 객체는 Survival1영역으로 이동 후 Age 값이 증가되게 된다.
  • Survival1 영역이 가득차게되면 GC가 발생되고, 살아남은 객체는 다시 Survival 0으로 이동하게 된다.
  • Age 값이 특정 값을 넘어가게 되면 Old Generation 영역으로 옮겨진다. 이 과정을 Promotion이라 한다.
  • Old Generation 영역이 가득차게 되면 GC가 발생되고 이때 발생되는 GC를 Major GC라고 한다.

'CS' 카테고리의 다른 글

Process와 Thread  (0) 2022.11.02