Genç nesil çöp toplama algoritmalarıdır.
İkincisi (UseParNewGC), eşzamanlı kullanımlı nesil çöp toplama ile otomatik olarak etkinleştirilir (bkz. Java Eşzamanlı ve Paralel GC ), ancak iki paralel algoritma arasında bir fark var mı?
Genç nesil çöp toplama algoritmalarıdır.
İkincisi (UseParNewGC), eşzamanlı kullanımlı nesil çöp toplama ile otomatik olarak etkinleştirilir (bkz. Java Eşzamanlı ve Paralel GC ), ancak iki paralel algoritma arasında bir fark var mı?
Yanıtlar:
Çok fazla aramanın ardından bulduğum en iyi açıklama Java Performance Tuning web sitesinden, Soru: 1.4.1 Çöp toplama algoritmaları, 29 Ocak 2003
Genç nesil çöp toplama algoritmaları
(Orijinal) kopyalama kolektör (Varsayılan: Etkin). Bu toplayıcı devreye girdiğinde, tüm uygulama iş parçacıkları durdurulur ve kopyalama koleksiyonu bir iş parçacığı kullanılarak devam eder (bu, çok CPU'lu bir makinede olsa bile yalnızca bir CPU anlamına gelir). Bu, dünyayı durdurma koleksiyonu olarak bilinir, çünkü temelde JVM, koleksiyon tamamlanana kadar diğer her şeyi duraklatır.
Paralel kopyalama toplayıcı (XX kullanılarak Etkin + UseParNewGC). Orijinal kopyalama toplayıcısı gibi, bu da dünyayı durduran bir koleksiyoncu. Ancak bu toplayıcı, kopyalama koleksiyonunu birden çok iş parçacığı üzerinde paralelleştirir; bu, çok CPU'lu makineler için orijinal tek iş parçacıklı kopyalama toplayıcısından daha verimlidir (tek CPU'lu makineler için olmasa da). Bu algoritma, orijinal tek iş parçacıklı kopyalama toplayıcısıyla karşılaştırıldığında, mevcut CPU sayısına eşit bir faktörle genç nesil toplama işlemini potansiyel olarak hızlandırır.
Paralel süpürme toplayıcı (-XX kullanılarak Etkin: UseParallelGC). Bu, önceki paralel kopyalama toplayıcıya benzer, ancak algoritma, çok CPU'lu makinelerde gigabayt yığınları (10 GB'ın üzerinde) için ayarlanmıştır. Bu toplama algoritması, duraklamaları en aza indirirken verimi en üst düzeye çıkarmak için tasarlanmıştır. Yığın alanlarını otomatik olarak yeniden boyutlandıracak isteğe bağlı bir uyarlanabilir ayar politikasına sahiptir. Bu toplayıcıyı kullanırsanız, yalnızca eski nesil orijinal mark-süpürme toplayıcıyı kullanabilirsiniz (yani, yeni eski nesil eşzamanlı toplayıcı bu genç nesil toplayıcıyla çalışamaz).
Bu bilgilerden, ana fark (CMS işbirliği dışında), UseParallelGC'nin ergonomiyi desteklerken UseParNewGC'nin desteklememesidir .
UseParNewGC Genç nesil kopyalama toplayıcısının paralel bir sürümü eşzamanlı toplayıcıyla birlikte kullanılır (yani komut satırında -XX: + UseConcMarkSweepGC kullanılırsa UseParNewGC bayrağı, aksi takdirde komut satırında açıkça ayarlanmadıysa true olarak ayarlanır. ).
Belki de anlamanın en kolay yolu, Alexey Ragozin tarafından yapılan çöp toplama algoritmalarının kombinasyonlarıdır.
Sonuç:
-XX:-UseParallelGC
.
-XX:+UseParallelGC
Modern JVM'ler için hem genç hem de yaşlı GC için paralel GC kullanmak için müşteri adayları uygulamak . Bakın bugs.openjdk.java.net/browse/…
Genellikle "paralel genç nesil toplayıcı" olarak bilinen UseParNewGC, daha karmaşık ve verimli olması dışında paralel çöp toplayıcıyla (-XX: + UseParallelGC) tüm yönlerden aynıdır. Ayrıca bir "eşzamanlı düşük duraklamalı toplayıcı" ile kullanılabilir.
Daha fazla bilgi için Java GC SSS , soru 22'ye bakın.
UseParNewGC ile ilgili bilinen bazı hataların olduğunu unutmayın.
-XX: + UseParNewGC'yi -XX: + UseConcMarkSweepGC ile birlikte kullanmak, -XX: + UseParallelGC ile karşılaştırıldığında Küçük GC'ler için daha yüksek duraklama süresine neden olur.
Bunun nedeni, Nesnelerin Genç Nesilden Eski Nesile yükseltilmesi, bu nesne için bir adres bulmak için En İyi Uyum algoritmasının (eski nesil parçalanma nedeniyle) çalıştırılmasını gerektirecek olmasıdır.
-XX: + UseParallelGC kullanılırken böyle bir algoritmanın çalıştırılması gerekmez, çünkü + UseParallelGC yalnızca MarkandCompact Collector ile yapılandırılabilir ve bu durumda parçalanma olmaz.