Java GC Type

Serial GC Parallel GC CMS GC G1 GC

Java의 Garbage Collection은 CPU의 발전에 따라 새로운 알고리즘들이 생기고 있다.
그 중 가장 기본이되고 간단한 GC가 Serial Garbage Collector 이다.

Serial GC 란?

Serial GC는 기본적으로 single virtual CPU를 사용하여 minor & major GC를 처리하도록 설계되었다.
따라서 GC가 수행될 때 모든 application thread가 멈추지만 단일 CPU로 GC를 진행한다.
그렇기 때문에 많은 CPU core를 가진 환경에서는 적절하지 않다.

usage

CPU가 많은 환경에서 적절하지 않으므로 주로 client style 시스템에서 사용되기도 하는데,
STW가 긴 편이므로 STW가 상관없는 환경에서 사용된다.

  • Java SE5, 6에서 client style machine에 대해 default로 사용되었던 GC 이기도 하다.

따라서 client에서는 종종 사용할 수 있지만 운영 서버에서는 절대 사용하면 안되는 방식이다.
운영 서버에서 Serial을 사용하면 application 성능이 많이 떨어질 수 밖에 없다.

Young

young 영역에서는 앞서 설명한 Generational Process에 따라 GC를 수행한다.

Old

old 영역에서는 Mark Sweep Compact라는 알고리즘을 사용한다.

  1. mark - 살아있는 객체 식별
  2. sweep - 살아있는 것만을 남기는 동작
  3. compact - heap의 앞 부분부터 채우는 압축

command

-XX:+UseSerialGC으로 serialGC를 사용할 수 있다.

  • java -XX:+UseSerialGC -jar demo.jar

공통 command

아래 command는 모든 GC에서 공통으로 사용되는 command 이다.

command desc
-Xms Sets the initial heap size for when the JVM starts.
-Xmx Sets the maximum heap size.
-Xmn Sets the size of the Young Generation.
-XX:PermSize Sets the starting size of the Permanent Generation.
-XX:MaxPermSize Sets the maximum size of the Permanent Generation

reference

  • https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html