Garbage Collector

이상혁·2024년 1월 22일
0

Garbage Collector

이 garbage collector는 자바로 개발한 프로그램이 동작하던 중 필요가 없어진 데이터가 메모리를 차지하고 있어서 메모리를 낭비하고 있는 경우가 있다.
이렇게 불필요하게 메모리를 차지하고 있는 데이터를 지우는 역할을 하는 것이 Garbage Collector이다.

Garbage Collector의 과정

Garbage Collector의 과정을 간단하게 살펴보자.
stack에 모든 변수를 스캔하면서 각각 어떤 객체를 참조하고 있는 지 마킹을 한다. 그리고 마킹한 그 객체 혹은 리스트가 누구를 또 참조하고 있는 지 보고 마킹을 한다.
이 과정을 Mark라고 한다.

그리고 마킹이 되지 않은 객체를 Heap에서 제거하는 것이다.
제거하는 과정을 Sweep이라고 한다.

Garbage Collector 언제 일어날까?

이를 알기 전에 Heap의 구조를 알아야 한다.
Heap에는 New Generation과 Old Generation으로 나누어져 있다.
그리고 New Generation은 Eden, Survival0, Survival1 영역으로 나누어져 있다.

새로운 객체가 생기면 Eden이라는 영역에 계속해서 객체가 저장이 되고 이 영역이 다 차게 되면 Garbage Collector가 발생한다.
이 때 이 Garbage Collector를 minor GC라고 한다.
Eden이라는 영역에 대해서 Mark와 sweep과정이 일어나게 되고 그 중에서 살아남은 객체가 Survival0으로 이동하게 된다.

이 과정이 반복이 되어서 Survival0 영역도 차게 되면 마찬가지로 Mark and Sweep 과정이 계속 다시 일어나게 되고 Survival1 영역으로 옮겨진게 된다. 이 때 살아남은 객체는 Age 값이 증가게 된다.

그리고 Eden 영역에서 새로운 객체가 생성이 되고 Minor GC가 일어날 때 객체가 차 있는 Survival 영역으로 객체를 넘겨서 한 Survial의 영역은 비워져 있게 된다.

또 Minor GC가 발생을 하고 영역이 차면 다른 Survial 영역을 이동하고 Age값이 증가한다.

이렇게 반복하다가 특정 Age 값을 넘기게 되면 Old Generation으로 이동을 하게 된다.
이렇게 Old Generation으로 이동하는 과정을 promotion이라고 한다.

이러한 과정이 반복이 되어서 Old Generation 영역이 다 차게 되면 GC가 발생을 하는데 이 때 발생을 하는 GC는 Major GC이다.

이러한 과정이 반복이 되면서 Garbage Collector가 메모리를 관리하는 것이다.

profile
개발 공부 하기 위해 만든 블로그

0개의 댓글