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


Genç nesil çöp toplama için algoritmalar.

İkincisi (UseParNewGC) eşzamanlı tenured nesil çöp toplama ile otomatik olarak devreye girer (bkz. Java Eşzamanlı ve Paralel GC) Fakat iki paralel algoritma arasında bir fark var mı?


77
2018-01-20 13:11


Menşei




Cevaplar:


Birçok aramadan sonra, bulduğum en iyi açıklama, Java Performance Tuning web sitesinden geliyor. Ayın Sorusu: 1.4.1 Çöp toplama algoritmaları, 29 Ocak 2003

Genç nesil çöp toplama algoritmaları

(orijinal) kopyalayıcı (Varsayılan olarak etkindir). Bu toplayıcı devreye girdiğinde, tüm uygulama konuları durur ve kopyalama koleksiyonu bir iş parçacığı kullanarak devam eder (bu, çok işlemcili bir makinede olsa bile sadece bir CPU anlamına gelir). Bu, dünya çapında bir koleksiyon olarak bilinir, çünkü temelde JVM, koleksiyon tamamlanana kadar her şeyi duraklatır.

paralel kopyalama toplayıcı (-XX: + UseParNewGC kullanarak etkinleştirildi). Orijinal kopyalama toplayıcısı gibi bu da dünya çapında bir koleksiyoncudur. Bununla birlikte, bu toplayıcı, kopyalama işlemlerini çoklu iş parçacığı üzerinde paralel hale getirmektedir; bu, çok-işlemcili makineler için orijinal tek-iplikli kopyalama toplayıcısından daha verimlidir (tek işlemcili makineler için olmasa bile). Bu algoritma, orijinal tekdüze dişli kopyalama toplayıcısına kıyasla, genç nesil koleksiyonunu mevcut CPU sayısına eşit bir faktörle hızlandırabilir.

paralel çöp toplayıcı (-XX: UseParallelGC kullanarak etkinleştirildi). Bu, önceki paralel kopyalama toplayıcısına benzer, ancak algoritma çoklu işlemci makinelerinde gigabayt yığınları (10GB üzeri) için ayarlandı. Bu toplama algoritması, duraklamaları en aza indirirken çıktıyı en üst düzeye çıkarmak için tasarlanmıştır. Yığın alanlarını otomatik olarak yeniden boyutlandıracak isteğe bağlı uyarlamalı bir ayarlama politikasına sahiptir. Bu toplayıcıyı kullanırsanız, orijinal işaretleme toplayıcısını yalnızca eski jenerasyonda kullanabilirsiniz (diğer bir deyişle, yeni nesil eşzamanlı kollektör bu genç nesil toplayıcı ile çalışamaz).

Bu bilgilerden, ana fark (CMS işbirliğinden ayrı olarak) UseParallelGC desteklerinin olduğu görülmektedir. ergonomi  UseParNewGC yokken.


113
2018-01-26 19:05



Biraz daha güncel bağlantı fasterj.com/articles/oraclecollectors1.shtml - phunehehe
@phunehehe Bağlantı için teşekkürler! Çok yardımcı oluyor. - The Student Soul


Paralel GC

  • XX: + UseParallelGC Scavenges için paralel çöp toplama kullanın. (1.4.1'de tanıtıldı)
  • XX: + UseParallelOldGC Tam koleksiyonlar için paralel çöp toplama kullanın. Bu seçeneğin etkinleştirilmesi otomatik olarak -XX: + UseParallelGC'yi ayarlar. (5.0 güncellemesi 6'da sunulmuştur.)

UseParNewGC

UseParNewGC   Genç nesil kopyalama kollektörünün paralel versiyonu kullanılıyor   eşzamanlı kolektör ile (yani, eğer -XX: + UseConcMarkSweepGC ise   Komut satırında kullanılır, daha sonra UseParNewGC bayrağı da true olarak ayarlanır.   Aksi açıkça komut satırında ayarlanmamışsa).

Belki de anlamanın en kolay yolu, çöp toplama algoritmalarının Alexey Ragozin

<table border="1" style="width:100%">
  <tr>
    <td align="center">Young collector</td>
    <td align="center">Old collector</td>
    <td align="center">JVM option</td>
  </tr>
  <tr>
    <td>Serial (DefNew)</td>
    <td>Serial Mark-Sweep-Compact</td>
    <td>-XX:+UseSerialGC</td>
  </tr>
  <tr>
    <td>Parallel scavenge (PSYoungGen)</td>
    <td>Serial Mark-Sweep-Compact (PSOldGen)</td>
    <td>-XX:+UseParallelGC</td>
  </tr>
  <tr>
    <td>Parallel scavenge (PSYoungGen)</td>
    <td>Parallel Mark-Sweep-Compact (ParOldGen)</td>
    <td>-XX:+UseParallelOldGC</td>
  </tr>
  <tr>
    <td>Serial (DefNew)</td>
    <td>Concurrent Mark Sweep</td>
    <td>
      <p>-XX:+UseConcMarkSweepGC</p>
      <p>-XX:-UseParNewGC</p>
    </td>
  </tr>
  <tr>
    <td>Parallel (ParNew)</td>
    <td>Concurrent Mark Sweep</td>
    <td>
      <p>-XX:+UseConcMarkSweepGC</p>
      <p>-XX:+UseParNewGC</p>
    </td>
  </tr>
  <tr>
    <td colspan="2">G1</td>
    <td>-XX:+UseG1GC</td>
  </tr>
</table>

Sonuç:

  1. Paralel toplama yöntemine ihtiyaç duyduğunuzda -XX: + UseParallelGC uygulayın GENÇ nesil BİR TEK, (fakat hala) seri işaretleme yöntemini ESKİ nesil koleksiyonu
  2. Paralel toplama yöntemine ihtiyaç duyduğunuzda -XX: + UseParallelOldGC uygulayın GENÇ nesil (otomatik olarak -XX: + UseParallelGC) VE  ESKİ nesil koleksiyonu
  3. Paralel toplama yöntemine ihtiyaç duyduğunuzda -XX: + UseParNewGC & -XX: + UseConcMarkSweepGC uygulayın GENÇ nesil VE koleksiyonunuzda CMS yöntemini gerektirir ESKİ nesil hafıza
  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ç nesle karşı seri yöntem kullanmak isterseniz UseParNewGC

16
2018-06-30 08:46



Olmalıdır -XX:-UseParallelGC. - Minas Mina


UseParNewGC genellikle "paralel genç nesil toplayıcı" olarak bildiği gibi daha karmaşık ve etkili olması dışında paralel çöp toplayıcı (-XX: + UseParallelGC) olarak her şekilde aynıdır. Ayrıca "eşzamanlı düşük duraklama toplayıcı" ile kullanılabilir.

Görmek Java GC SSSDaha fazla bilgi için soru 22.

UseParNewGC ile bilinen bazı hatalar olduğunu unutmayın.


15
2018-01-20 13:36



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


-XX: + UseParNewGC, -XX: + UseConcMarkSweepGC ile birlikte kullanılması, -XX: + UseParallelGC ile karşılaştırıldığında, Minör GC'ler için daha yüksek bekleme süresine neden olur.

Bunun nedeni, Young'dan Old Generation'a kadar olan nesnelerin tanıtımının, bu nesne için bir adres bulmak için En İyi Uyum algoritmasının (eski nesil fragmantasyonu nedeniyle) çalıştırılmasını gerektirmesidir.
-XX: + UseParallelGC kullanılırken böyle bir algoritmanın çalıştırılması gerekli değildir, çünkü + UseParallelGC yalnızca MarkandCompact Collector ile yapılandırılabilir, bu durumda parçalanma olmaz.


3
2018-01-27 12:09



Bu gerçekten iyi bir fikir. Onaylamak için herhangi bir test yaptınız mı? - fglez