GC(Garbage Collection)은 자바 가상 머신(Java Virtual Machine, JVM)에서 자동으로 메모리 관리를 수행하는 기능입니다. GC는 프로그래머가 직접 메모리를 할당하거나 해제하지 않아도 되므로, 프로그래밍이 간편해집니다.

GC는 힙(heap)이라는 메모리 영역에서 사용하지 않는 객체를 자동으로 제거합니다. 이를 통해 메모리 누수(memory leak)를 방지하고, 메모리를 효율적으로 사용할 수 있습니다.

GC는 크게 세 가지 유형으로 나뉩니다.

G1(Garbage First) GC는 자바 7부터 도입된 새로운 가비지 컬렉션(Garbage Collection, GC) 알고리즘입니다. G1 GC는 대용량 힙(heap)에서 발생하는 일시 중지(stop-the-world) 시간을 줄이는 것을 목표로 합니다.

G1 GC는 힙(heap)을 여러 개의 영역(Region)으로 분할합니다. 각 영역은 1MB ~ 32MB 크기로 구성되며, Eden 영역, Survivor 영역, Old 영역으로 구분됩니다. Eden 영역은 새로 생성된 객체가 저장되는 영역이며, Survivor 영역은 Eden 영역에서 살아남은 객체가 임시로 저장되는 영역입니다. Old 영역은 오랫동안 살아남은 객체가 저장되는 영역입니다.

G1 GC는 주기적으로 전체 힙(heap)을 검사하여 가비지 객체를 찾아내고, 이를 처리합니다. 이 과정에서 일부 영역만 탐색하여 처리하므로, 일시 중지(stop-the-world) 시간을 최소화할 수 있습니다.

G1 GC는 Edan 영역과 Survivor 영역을 합쳐서 Evacuation Set이라는 것을 만들어서, 가비지 객체를 처리합니다. Evacuation Set은 살아남은 객체와 가비지 객체를 구분하여 처리하므로, 전체 힙(heap)을 검사할 필요가 없어서 일시 중지(stop-the-world) 시간을 줄일 수 있습니다.

G1 GC는 최신의 가비지 컬렉션(Garbage Collection, GC) 알고리즘 중 하나입니다. 대용량 메모리에서 높은 성능을 발휘하며, 일시 중지(stop-the-world) 시간이 짧아서 대규모 분산 시스템에서 매우 유용합니다.

Serial GC

Serial GC는 자바 가상 머신(Java Virtual Machine, JVM)에서 사용되는 가장 단순한 가비지 컬렉션(Garbage Collection, GC) 알고리즘 중 하나입니다. 이 알고리즘은 단일 스레드에서 작동하며, GC를 수행하는 동안 일시 중지(stop-the-world)가 발생합니다. 이는 대용량 메모리에서는 비효율적이므로, 주로 작은 규모의 애플리케이션에서 사용됩니다.

Serial GC는 가장 기본적인 알고리즘으로, 처리할 객체들을 단순히 순차적으로 처리하는 방식을 취합니다. 이 알고리즘은 작은 메모리 사용량에서는 빠르고 효과적입니다. 하지만 대용량의 메모리에서는 비효율적이며, 전체 GC 작업을 수행하는 동안 일시 중지가 발생합니다.

Serial GC는 작업을 단일 스레드에서 수행하기 때문에, 다른 GC 알고리즘에 비해 코드 구현이 간단합니다. 이 알고리즘은 성능이 중요하지 않은 작은 규모의 애플리케이션에서 사용됩니다.

Parallel GC

Parallel GC는 자바 5부터 도입된 새로운 가비지 컬렉션(Garbage Collection, GC) 알고리즘으로, Serial GC와는 다르게 멀티 스레드를 사용하여 GC를 수행합니다. 이 알고리즘은 대용량 메모리에서 빠르고 효과적인 GC를 제공합니다.