Serial GC (-XX:UseSerialGC)

Serial GC는 1개의 GC스레드로 Mark/Sweep/Compact 작업을 순차적으로 수행한다. 1개의 스레드로 작업하므로 GC를 수행하는데 시간이 오래 걸려 거의 사용하지 않음

Incremental GC (-Xincgc)

Full GC 동안 어플리케이션이 멈추는 시간을 줄이기 위해 고안된 방식이지만 현재는 거의 사용하지 않음.

Incremental GC는 Minor GC 수행시 Young 영역만 정리하는 것이 아미라 Old 영역을 추가로 조금씩 정리함으로써 Full GC가 발생하는 빈도를 낮춤.

그러나 Minor GC 수행 빈도가 높고, 자원 사용률이 많으면서도 Full GC가 획기적을 감소하는 것도 아니라서 거의 사용하지 않음

Parallel GC (-XX:UseParallelGC)

-XX:UseParallelGC 옵션은 Minor GC 수행 시 적용되는 옵션으로, Serial GC와 동일한 알고리즘이지만, 여러 개의 스레드로 GC를 병렬로 처리함으로써 성능이 Serial GC에 비해 우수(단, CPU가 여러개 일 때 효과있음)

CPU 코어가 1개 인 경우에는 Serial GC로 변경되며, GC스레드 수는 -XX:ParallelGCThreads 옵션으로 조정할 수 있다.

ParallelGCThreads 옵션을 설정하지 않으면 기본적으로 아래 규칙에 따라 스레드 수를 정한다.

ParallelGCThreads = (ncpus <= 8) ? ncpus : ((ncpus * 5) / 8)

Parallel Old GC (-XX:UseParallelOldGC)

-XX:UsePallelGC가 Young 영역의 Minor GC에 적용되는 옵션인 반면, -XX:UsePallelOldGC는 Old 영역을 GC 할때 병렬로 이루어지도록 하는 옵션이다.

GC 스레드 수는 Parallel GC와 동일하게 -XX:PallelGCThreads 로 조정 할 수 있다.

Concurrent Mark and Sweep (CMS) GC (-XX:UseConcMarkSweepGC)

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/cms.html

다른 GC 옵션들은 GC가 수행 중일 때 어플리케이션이 멈추지만, CMS GC는 멈추는 시간을 최소화 한다.

MarkSweep 단계를 어플리케이션 수행과 동시에 진행하므로 Concurrent Mark and Sweep GC 라고 한다.