Skip to content

Latest commit

 

History

History
18 lines (11 loc) · 1.78 KB

[#21] G1 GC에 대해서 설명해주실 수 있나요.md

File metadata and controls

18 lines (11 loc) · 1.78 KB

G1 GC가 무엇인지에 대해서 설명해주실 수 있나요?

G1 GC는 CMS GC와 마찬가지로 Suspend Time을 분산시켜 응답시간을 개선하는데 초점을 맞춘 GC입니다. G1 GC는 기존의 CMS GC가 가지고 있는 문제점들을 개선하기 위해 JDK 6버전에서 처음 등장하였으며 JDK 7버전부터 G1 GC를 정식적으로 제공하고 JDK 9버전에는 기본 GC로 G1 GC를 사용하고 있습니다.

CMS GC는 몇가지 문제점을 가지고 있습니다. CMS GC는 단편화 문제를 해결하기 위해 Free List를 사용하고 있는데 하지만 이로 인한 Young 영역에서의 오버헤드가 증가할 뿐더러 Concurrent Mark 단계에서 승격되어 Old 영역에 존재하게된 객체는 GC의 대상에서 제외되는 Floating Garbage 문제가 발생하게 됩니다. G1 GC는 이러한 CMS GC의 단점을 개선하면서도 정지 시간을 최소화하면서 가능한 많은 처리량을 확보하기 위해 만들어졌습니다.


G1 GC가 가지고 있는 특징에 대해서 말씀해주실 수 있으신가요?

G1 GC는 다른 GC들과 다르게 특인 메모리 구조를 가지고 있습니다. 기존의 Heap 영역을 Generation으로 분리하는 방식과 다르게 G1 GC에서는 Heap 영역을 일정한 크기의 Region이라는 단위로 분리하고 있습니다. 해당 Region들은 Eden, Survivor, Old 영역일 수 있으며 일부 영역은 크기가 큰 객체를 저장하기 위한 영역으로 Humongous 영역이 존재하면 Region 크기의 1/2 이상의 크기를 가진 객체들이 저장되는 공간으로 GC 최적화가 되어있지 않은 공간이기 때문에 크기가 큰 객체를 주로 다루는 애플리케이션에서는 G1 GC의 사용이 부적절합니다.