Java GC Type
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라는 알고리즘을 사용한다.
- mark - 살아있는 객체 식별
- sweep - 살아있는 것만을 남기는 동작
- 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