-XX: + UseParallelGC ve -XX: + UseParNewGC arasındaki fark


83

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:


119

Ç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 .


3
Biraz daha güncel bağlantı daha hızlıj.com
articles/

@phunehehe Bağlantı için teşekkürler! Çok yardımcı oluyor.
The Student Soul

21

Paralel GC

  • XX: + UseParallelGC Çöp atma işlemleri için paralel çöp toplamayı kullanın. (1.4.1'de sunulan)
  • XX: + UseParallelOldGC Tüm koleksiyonlar için paralel çöp toplama kullanın. Bu seçeneğin etkinleştirilmesi otomatik olarak -XX: + UseParallelGC'yi ayarlar. (5.0 güncelleme 6'da sunulmuştur.)

UseParNewGC

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ç:

  1. YALNIZCA GENÇ nesil üzerinde paralel toplama yöntemine ihtiyaç duyduğunuzda -XX: + UseParallelGC uygulayın , ( ancak yine de) ESKİ nesil koleksiyonu olarak seri işaretli tarama yöntemini kullanın
  2. GENÇ nesil üzerinde paralel toplama yöntemine ihtiyaç duyduğunuzda -XX: + UseParallelOldGC uygulayın (otomatik olarak -XX: + UseParallelGC'yi ayarlar) VE ESKİ nesil toplama
  3. Uygula -XX: + UseParNewGC & -XX: + UseConcMarkSweepGC baştan paralel toplama yöntemini gerektirir GENÇ nesil VE üzerine koleksiyon olarak CMS yöntem gerektirir ESKİ nesil hafızasına
  4. -XX: + UseParallelGC veya -XX: + UseParallelOldGC'yi -XX: + UseConcMarkSweepGC ile aynı anda uygulayamazsınız, bu nedenle -XX: + UseParNewGC'nin CMS ile eşleştirilmesi gerekir, aksi takdirde -XX: + UseSerialGC'yi açıkça kullanın VEYA -XX: - Genç nesile karşı seri yöntemi kullanmak istiyorsanız UseParNewGC

Olmalı -XX:-UseParallelGC.
Minas Mina

Not: Sonuç # 1 artık doğru değil. -XX:+UseParallelGCModern 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/…
turbanoff

15

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.


8
Hangi bilinen hataların veya hangi JVM sürümünün bunlara sahip olduğunu biliyor musunuz?
fglez

4

-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.


Bu gerçekten iyi bir fikir. Doğrulamak için herhangi bir test yaptınız mı?
fglez
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.