현재 기업을 보면 Java 8 혹은 Java 11을 주로 채택하여 사용하고 있는 것 같다. 개인적으로는 Java 8의 기능을 수용하면서 더 나은 라이브러리가 추가 되었고, 성능이 개선된 G1 GC를 사용하는 Java 11을 사용하는 편이다. 또한 Java 11은 LTS 버전이므로 장기적인 지원이 보장된 버전이므로 앞으로도 유익한 기능이 나올 것으로 기대한다.
Java 9+
의 default GC
현재 GC 중 stop-the-world의 시간이 제일 짧음
CMS GC 를 개선하여 만든 GC로 위에서 살펴본 GC와는 다른 구조를 가진다.
Heap을 Region
이라는 일정한 부분으로 나눠서 메모리를 관리한다.
전체 Heap에 대해서 탐색하지 않고 부분적으로 Region 단위로 탐색하여, 각각의 Region에만 GC가 발생한다
더이상 참조되지 않는 객체를 확인하기 위해서 JVM이 GC를 실행하기 위해 애플리케이션 실행을 멈춘다. 이를 stop the world라고 한다. GC를 실행하는 쓰레드를 제외한 나머지 쓰레드들은 모두 작업을 멈추게 되고, GC가 완료된 이후 작업을 다시 실행한다. 그 과정에서 성능이 저하되는 문제가 발생한다.
→ Stop the World
따라서 stop-the-world가 최대한 덜 발생하도록 하여, Java Application이 멈추는 현상을 줄이는 것이 GC의 성능을 결정한다.