[자바]GC(Garbage Collection Process) 가비지 컬렉션

allnight5·2022년 11월 30일
0

자바 개념정리

목록 보기
18/28

GC(Garbage Collection Process) 가비지 컬렉션

(Heap영역에서 정해진 영역이 가득 찼을 때 일어나는 행위)

간단하게

객체가 쌓이면 쌓일수록 도달 불가능한 객체는 날라가고, 살아남은 객체도 오른쪽으로 나이를 먹으며 밀려난다는 겁니다. 그리고 나이를 많이 먹은 객체는 결국 Promotion으로 Old Generation에 위치하게 되고 major GC가 일어나면 오래된 객체들이 날라간다는 것이죠.

자세하게

  1. 새롭게 생성된 객체는 최초에 Eden 영역에 할당됩니다. 두 개의 Survivor Space는 비워진 상태로 시작합니다.
  2. Eden 영역이 가득차면, MinorGC가 발생합니다.
  3. MinorGC가 발생하면, Reachable 객체들은 S0으로 옮겨집니다. Unreachable 객체들은 Eden영역이 클리어 될때 함께 메모리에서 사라집니다.
  4. 다음 MinorGC가 발생할때, Eden 영역에는 3번과 같은 과정이 발생합니다. Unreachable 객체들은 지워지고, Reachable 객체들은 Survivor Space로 이동합니다. 기존에 S0에 있었던 Reachable 객체들은 S1으로 옮겨지는데, 이때, age값이 증가되어 옮겨집니다. 살아남은 모든 객체들이 S1으로 모두 옮겨지면, S0와 Eden은 클리어됩니다. Survival Space에서 Survival Space로의 이동은 이동할 때마다 age 값이 증가합니다.
  5. 다음 MinorGC가 발생하면, 4번 과정이 반복되는데, S1이 가득 차 있었으므로 S1에서 살아남은 객체들은 S0로 옮겨지면서 Eden과 S1은 클리어됩니다. 이 때에도, age 값이 증가되어 옮겨지죠. Survivor Space에서 Survivor Space 로의 이동은 이동할때마다 age값이 증가합니다.
  6. Young Generation 에서 계속해서 살아남으며 age 값이 증가하는 객체들은 age 값이 특정값 이상이 되면 Old Generation 으로 옮겨지는데 이 단계를 Promotion이라고 합니다.
  7. MinorGC가 계속해서 반복되면, Promotion 작업도 꾸준히 발생하게 되겠죠?
  8. Promotion 작업이 계속해서 반복되면서 Old Generation 이 가득차게 되면 MajorGC가 발생하게 됩니다.
profile
공부기록하기

0개의 댓글