Java Concurrent and Parallel GC

Ten artykuł tutaj sugeruje użycie -XX:+UseParNewGC "aby umożliwić równoległe GC młodego pokolenia z równoczesnym GC".

Moim błędem jest to, że aby umożliwić zarówno równoległe i równoległe GC, powinienem

  • użyj -XX:+UseParNewGC lub
  • użyj obu -XX:+UseParNewGC oraz -XX:+UseConcMarkSweepGC ?

PS

Używam JVM 6.
Author: pdeva, 2008-10-21

6 answers

Ponieważ dokument, który podlinkowałeś, był dla maszyny wirtualnej 1.4.2, to zakładam, że używasz (JVMs 5 i 6 zachowują się inaczej).

Z http://java.sun.com/docs/hotspot/gc1.4.2/

If-XX: + UseConcMarkSweepGC jest używane na wiersz poleceń następnie flaga UseParNewGC jest również ustawione na true, jeśli nie jest inaczej jawnie ustawiona na wiersz poleceń

Więc odpowiedź jest taka, że wystarczy użyć -XX: + UseConcMarkSweepGC i włączy współbieżne kolektor z równoległym kolektorem młodej generacji.

Edit: dla Java 6, ta sama flaga (- XX:+UseConcMarkSweepGC) włącza współbieżny kolektor. Wybór kolektora zależy od kilku rzeczy i należy przetestować różne konfiguracje. Ale są pewne bardzo ogólne wytyczne. Jeśli masz pojedynczy procesor, maszynę z pojedynczym gwintem, powinieneś użyć kolektora szeregowego(domyślne dla niektórych konfiguracji, może być włączone jawnie dla opcji-XX: + UseSerialGC). Na maszyny wieloprocesorowe, w których obciążenie jest zasadniczo związane z procesorem, używają kolektora równoległego. Ta opcja jest domyślnie włączona, jeśli używasz flagi-server, lub możesz ją włączyć jawnie za pomocą-XX: + UseParallelGC. Jeśli wolisz, aby GC zatrzymywało się krócej kosztem wykorzystania większego całkowitego czasu procesora dla GC, a masz więcej niż jeden procesor, możesz użyć współbieżnego kolektora (- XX:+UseConcMarkSweepGC). Należy zauważyć, że współbieżny kolektor zwykle wymaga więcej pamięci RAM przydzielonej do JVM niż szeregowy lub kolektory równoległe dla danego obciążenia, ponieważ może wystąpić fragmentacja pamięci.

 37
Author: sk.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-21 00:41:55
 7
Author: anjanb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-12 11:10:24

Ten wpis na blogu ma ładny podział różnych kolekcjonerów i które opcje są ważne: http://blogs.oracle.com/jonthecollector/entry/our_collectors

 7
Author: tpoindex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-25 10:35:47

Java GC tuning jest w zasadzie ciemną sztuką, ale w mojej aplikacji (działa ze stertą 50 + GB i 16 fizycznymi rdzeniami) kolektor ConcMarkSweep spowodował 3x speedup nad domyślnym serwerem i 2.2 x speedup nad ParallelOldGC.

Jeśli nie dzielisz maszyny z innymi procesami (więc bezczynne rdzenie są po prostu marnowane), użyj ConcMarkSweepGC.

 5
Author: Charles Munger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-14 06:58:55

ParNew jest domyślnym kolektorem młodej generacji, gdy używany jest CMS.Musisz tylko podać -XX: + UseConcMarkSweepGC, aby używać CMS i parnew będzie używany domyślnie. CMS jest dobrym kolektorem, jeśli unikanie drgań GC ma wyższy priorytet, ale jeśli przepustowość jest ważniejsza dla np. dla partii jak zadanie domyślny kolektor równoległy słońca robi lepszą pracę.

 1
Author: Deven,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-05 09:26:45

Nie można włączyć dwóch opcji GC w tym samym czasie. Sugerowałbym użycie CMS, który jest lepszy niż i GC następnej generacji w porównaniu do UseParNewGC. a jeśli używasz Javy 1.7 lub nowszej i rozmiar sterty jest stosunkowo większy (np. > 4GB), rozważ użycie G1.

 0
Author: Shyamal Madura Patabendige,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-14 09:50:00