2 Mart 2020 Pazartesi

Parallel Collector - Java 8 İçin Varsayılan GC

Giriş
Açıklaması şöyle. GC çalışırken "Stop the World" emri verilir. Bir seferde mümkün olduğunca fazla GC işlemini paralel olarak yapmaya çalışır. Dolayısıyla "Low Pause" bir collector değildir.
Similar to serial GC, It uses mark-copy in the Young Generation and mark-sweep-compact in the Old Generation. Multiple concurrent threads are used for marking and copying / compacting phases. You can configure the number of threads using -XX:ParallelGCThreads=N option.
Java 8
- Java 7'den önce minor GC için - yani Young Space için - paralel thread'ler, ancak major GC için - yani Old Space için - tek thread kullanıyordu. Yani major GC maliyetliydi.

- Java 7'den itibaren tüm minor ve major GC işlemleri için paralel thread'ler kullanır. Dolayısıyla işini mümkün olduğunca hızlı bitirmeye çalışır

Şeklen şöyle. Burada Parallel GC kullanılırsa yan yana bir sürü sarı çizgi yani GC thread görülebilir.


Parallel Collector Belleği İşletim Sistemine Geri Vermez
Açıklaması şöyle.
Parallel is a high throughput GC and used by default in JDK8. At the same time, it does not suit for memory shrinking that makes it inappropriate for flexible vertical scaling.
...
As we can see, the unused RAM is not released back to OS. JVM with Parallel GC keeps it forever, even disregarding the explicit Full GC calls.
Young Generation - Mark-copy
Mark-copy olduğu için yaşamasına karar verilen nesneler başka bloğa taşınır

Old Generation - Mark-sweep-compact
Mark-sweep-compact olduğu için yaşamasına karar verilen nesneler aynı blokta yan yana olacak şekilde taşınırlar.


Hiç yorum yok:

Yorum Gönder