[ CS Study ] Garbage Collector

이승렬·2023년 7월 15일
0

[Java]

목록 보기
3/24
post-thumbnail

1. Garbage Collector (GC) 정의

GC는 힙 영역에서 사용하지 않는 객체들을 제거하는 작업을 총칭합니다.
이 객체를 제거하는 작업이 필요한 이유는 자바는 개발자가 메모리를 직접 해제해줄 수 없는 언어이기 때문입니다.
따라서 객체를 사용하고 제거하는 기능이 필요하게 됩니다.

2. Garbage Collector 동작방식

GC의 동작방식은 가장 간단한 Serial GC 방식으로 설명합니다.
좀 더 진보된 GC는 G1 GC, ZGC가 있으며 여기선 다루지 않습니다.

3. Garbage Collector 구분

GC는 Minor GC, Major GC로 구분할 수 있습니다. Minor GC는 young 영역에서, Major GC는 old 영역에서 일어난다고 정의합니다. (Major GC, Full GC는 명확히 정의된 문서가 없습니다.) GC를 수행할 때는 GC를 수행하는 스레드 이외의 스레드는 모두 정지합니다. 이를 Stop-the-world라고 합니다.

4. Minor GC

Minor GC는 Eden 영역이 가득 참에서 부터 시작됩니다.
Eden 영역에서 참조가 남아있는 객체를 mark하고 survivor 영역으로 복사합니다.
그리고 Eden 영역을 비웁니다.
Survivor 영역도 가득차면 같은 방식으로 다른 Survivor 영역에 복사하고 비웁니다.
이를 반복하다 보면 계속 해서 살아남는 객체는 old 영역으로 이동하게 됩니다.

5. Major GC

Major GC는 old 영역에서 일어납니다.
위와 반대로 삭제되어야 하는 객체를 mark합니다. 그리고 지웁(sweep)니다.
메모리는 단편화 된 상태이므로 이를 한 군데에 모아주는 것을 Compaction이라 하며 compact라고 합니다.
그래서 Mark-Sweep-Compact 알고리즘이라고 합니다.

이것이 중요한 이유는 GC 수행시 시스템이 멈추기 때문에 의도치 않은 장애의 원인이 될 수 있습니다. 따라서 이를 위해 힙 영역을 조정하는 것을 GC 튜닝이라고 하고 JVM 메모리는 절대 마음대로 조정해선 안됩니다.

profile
Backend_Developer

0개의 댓글

관련 채용 정보