bsj805 / study_doc

java 8버전에서 17버전으로의 변화
0 stars 0 forks source link

JAVA 17 garbage collection #4

Open bsj805 opened 2 years ago

bsj805 commented 2 years ago

https://www.baeldung.com/jvm-garbage-collectors

bsj805 commented 2 years ago

JVM has five types of GC implementations:

Serial Garbage Collector Parallel Garbage Collector CMS Garbage Collector G1 Garbage Collector Z Garbage Collector

1. Serial Garbage Collector

가장 간단한 GC로, single thread에서 돈다. 이게 실행될 때 모든 어플리케이션 thread가 멈춘다. 멀티쓰레드 환경에서는 쓰기 좋지 않다. java -XX:+UseSerialGC -jar Application.java 이런식으로 실행

2. Parallel Garbage Collector

1번과 다르게, heap space 관리를 위해 multiple thread를 사용한다. 하지만 여전히 다른 모든 어플리케이션 thread를 정지시켜야 GC를 할 수 있다. 이 GC에서는

3. CMS Garbage Collector

Concurrent Mark Sweep (CMS)는 여러 garbage collector thread를 써서 GC를 한다. GC pause가 적어야 하는 어플리케이션이나, 어플리케이션 실행 중에도 프로세서를 GC와 같이 쓸 수 있는 경우를 위해 디자인 됐다. 이 GC는 concurrent하게 일어난다. java -XX:+UseParNewGC -jar Application.java JAVA 9 버전부터 deprecated JAVA 14 버전부터 지원안함

4. G1 Garbage Collector

G1 (Garbage First) garbage collector는 멀티 프로세서와 큰 메모리 공간을 가진 machine에서 실행되는 어플리케이션을 위한 것이다. JDK7버전부터 사용가능하고, CMS보다 performance가 좋다. G1 collector는 heap을 같은 사이즈의 heap region으로 나누어서, 각각을 연속된 가상 메모리 공간으로 사용한다. G1은 Marking phase를 먼저 실행해 object의 liveness를 파악하고,빈 공간으로 sweeping( 다른 오브젝트를 모은다)을 진행한다. 그래서 garbage first이다. java -XX:+UseG1GC -jar Application.java

5. JAVA8 에서는

같은 String을 표현하는데 global single char[] array를 쓰게 함으로써 heap을 optimize한다. add -XX:+UseStringDeduplication as a JVM parameter.

6. Z Garbage COllector

ZGC는 java11에 나와서, java15부터 사용되는 scalable low-latency garbage collector이다. ZGC는 모든 expensive work를 concurrently하게 진행한다.

G1 GC처럼 heap을 나누지만, 각각이 다른 사이즈일 수 있다.

To enable the Z Garbage Collector, we can use the following argument in JDK versions lower than 15:

java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC Application.java

From version 15 on, we don't need experimental mode on: java -XX:+UseZGC Application.java

ZGC가 default GC가 아니다. JAVA 11부터 쭉 G1GC가 default

bsj805 commented 2 years ago

https://blogs.oracle.com/javamagazine/post/java-garbage-collectors-evolution

image