Java 7 ist schon eine Weile nicht mehr verfügbar, aber ich kann keine guten Ressourcen für die Konfiguration der Garbage Collectors finden , insbesondere des neuen G1-Collectors .
Meine Fragen:
- Ist G1 der Standardkollektor in Java 7 und wenn nicht, wie aktiviere ich G1?
- Welche optionalen Einstellungen hat g1 in Java7?
- Wurden Änderungen an anderen Kollektoren wie cms oder dem Parallelkollektor in Java 7 vorgenommen?
- Wo finde ich eine gute Dokumentation zur Garbage Collection in Java 7?
java
garbage-collection
java-7
heap-memory
g1gc
Florakel
quelle
quelle
Antworten:
Der G1-Garbage Collector ist nicht die Standardeinstellung in meiner Java-Installation, Version 1.7.0_01. Sie können sich selbst davon überzeugen, indem Sie einige zusätzliche Befehlszeilenoptionen verwenden:
Sie müssen jedoch keine experimentellen Optionen mehr aktivieren, um den G1-Kollektor einzuschalten:
Ich weiß nicht, wo Sie eine gute Dokumentation finden können.
quelle
-XX:+UseParallelGC
.Oracle hat G1 schließlich in Java 7 U4 offiziell gemacht: http://www.oracle.com/technetwork/java/javase/7u4-relnotes-1575007.html
Beschreibung: http://docs.oracle.com/javase/7/docs/technotes/guides/vm/G1.html
Befehlszeilenoptionen: http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#G1Options
Ich glaube jedoch nicht, dass dies der Standardkollektor in Java 7 ist. Für Server ist der Standardkollektor wie in Java 6 der Standardkollektor.
quelle
Ja, G1 ist der neue Standard-Garbage Collector in Java 1.7 JVM.
Hier finden Sie zahlreiche Informationen zur Verwendung und Konfiguration des neuen Garbage Collector:
Ich fand diesen Artikel auch sehr hilfreich, um die Innereien von G1 zu verstehen.
Noch mehr Infos hier .
quelle
1. Ist G1 der Standardkollektor in Java 7 (...)
Die Regel auf dieser Java 5-Seite gilt weiterhin in Java 7 (und AFAIK, Java 8):
Aber bedenken Sie auch:
-client
VM geliefert und sind daher immer "Serverklasse".Wenn Sie beispielsweise unter Windows x64 ausführen ...
1. (...) wie aktiviere ich G1?
Ab Java 7 einfach
-XX:+UseG1GC
. Vielleicht ist auch von Interesse, wenn Sie möchten:2. Welche optionalen Einstellungen hat g1 in Java7?
Ich habe G1 selbst nicht verwendet, aber ich stelle fest, dass es denselben grundlegenden "Durchsatz / Ergonomie" -Flaggen entspricht, die zum Abstimmen der anderen parallelen Kollektoren verwendet wurden. Nach meiner Erfahrung mit dem Parallel GC war
-XX:GCTimeRatio
dies der entscheidende Faktor für den erwarteten Kompromiss zwischen Geschwindigkeit und Speicher. YMMV.G1-spezifische Optionen sind hier aufgelistet
3. Gab es Änderungen an (...) cms oder dem Parallelkollektor in Java 7?
Weiß nicht, aber ...
4. Wo finde ich eine gute Dokumentation zur Garbage Collection in Java 7?
Es kann schmerzhaft sein, es zu finden, nicht wahr? Die wahrscheinlich beste "Hub" -Seite, die ich gefunden habe, ist diese:
http://www.oracle.com/technetwork/java/javase/tech/index-jsp-140228.html
Einige gründliche Lektüre erforderlich, aber die Zeit lohnt sich, wenn Sie etwas tunen müssen. Besonders aufschlussreich ist: Garbage Collector Ergonomics
quelle
G1 ist in Java 7 kein Standardkollektor.
-XX:+UseG1GC
G1GC wird aktiviertEs gibt viele. In diesem Orakelartikel finden Sie vollständige Informationen.
Passen Sie aus diesem Grund kritische Parameter an
und belassen Sie alle anderen Parameter auf dem Standardwert .
Hier finden Sie eine Liste wichtiger Optionen und ihrer Standardwerte. Diese Liste gilt für die neueste Java HotSpot-VM, Build 24. Sie können die G1 GC-Einstellungen in der JVM-Befehlszeile anpassen und optimieren.
Wichtige Standardeinstellungen:
Legt die Größe einer G1-Region fest. Der Wert ist eine Zweierpotenz und kann zwischen 1 MB und 32 MB liegen. Das Ziel ist es, ungefähr 2048 Regionen basierend auf der minimalen Java-Heap-Größe zu haben.
Legt einen Zielwert für die gewünschte maximale Pausenzeit fest. Der Standardwert ist 200 Millisekunden. Der angegebene Wert passt sich nicht an Ihre Heap-Größe an.
Legt den Prozentsatz des Heaps fest, der als Minimum für die Größe der jungen Generation verwendet werden soll. Der Standardwert beträgt 5 Prozent Ihres Java-Heaps.
Legt den Prozentsatz der Heap-Größe fest, der als Maximum für die Größe der jungen Generation verwendet werden soll. Der Standardwert beträgt 60 Prozent Ihres Java-Heaps.
Legt den Wert der STW-Arbeitsthreads fest. Setzt den Wert von n auf die Anzahl der logischen Prozessoren. Der Wert von n entspricht der Anzahl der logischen Prozessoren bis zu einem Wert von 8.
Wenn mehr als acht logische Prozessoren vorhanden sind, wird der Wert von n auf ungefähr 5/8 der logischen Prozessoren festgelegt. Dies funktioniert in den meisten Fällen mit Ausnahme größerer SPARC-Systeme, bei denen der Wert von n ungefähr 5/16 der logischen Prozessoren betragen kann.
Legt die Anzahl der parallelen Markierungsfäden fest. Setzt n auf ungefähr 1/4 der Anzahl paralleler Garbage Collection-Threads (ParallelGCThreads).
Legt den Java-Heap-Belegungsschwellenwert fest, der einen Markierungszyklus auslöst. Die Standardbelegung beträgt 45 Prozent des gesamten Java-Heaps.
Legt den Belegungsschwellenwert für eine alte Region fest, die in einen gemischten Speicherbereinigungszyklus aufgenommen werden soll. Die Standardbelegung beträgt 65 Prozent
Legt den Prozentsatz des Heaps fest, den Sie verschwenden möchten. Die Java HotSpot-VM initiiert den gemischten Speicherbereinigungszyklus nicht, wenn der Prozentsatz der zurückfordernden Daten weniger als der Prozentsatz der Heap-Verschwendung ist
Legt die Zielanzahl gemischter Speicherbereinigungen nach einem Markierungszyklus fest, um alte Regionen mit höchstens G1MixedGCLIveThresholdPercent-Live-Daten zu erfassen. Der Standardwert ist 8 gemischte Speicherbereinigungen
Legt eine Obergrenze für die Anzahl alter Regionen fest, die während eines gemischten Speicherbereinigungszyklus gesammelt werden sollen. Der Standardwert beträgt 10 Prozent des Java-Heaps
Legt den Prozentsatz des Reservespeichers fest, der frei bleibt, um das Risiko von Überläufen zum Speicherplatz zu verringern. Der Standardwert beträgt 10 Prozent. Stellen Sie beim Erhöhen oder Verringern des Prozentsatzes sicher, dass der gesamte Java-Heap um denselben Betrag angepasst wird.
Sie haben viele G1GC-Parameter neu konfiguriert, die nicht erforderlich sind, wenn Sie der obigen Dokumentationsseite folgen. Bitte überprüfen Sie die obigen Empfehlungen, insbesondere für ParallelGCThreads und ConcGCThreads , die auf Ihren CPU-Kernen basieren sollen. Entfernen Sie die Neukonfiguration nicht benötigter Parameter.
Empfehlungen von Orakel:
Beachten Sie bei der Bewertung und Feinabstimmung von G1 GC die folgenden Empfehlungen:
Größe der jungen Generation : Vermeiden Sie es, die Größe der jungen Generation explizit mit der
-Xmn
Option oder einer anderen verwandten Option wie z-XX:NewRatio
. Das Festlegen der Größe der jungen Generation überschreibt das Ziel der Pausenzeit .Pausenzeitziele: Wenn Sie eine Garbage Collection auswerten oder optimieren, gibt es immer einen Kompromiss zwischen Latenz und Durchsatz. Der G1 GC ist ein inkrementeller Garbage Collector mit einheitlichen Pausen, aber auch mehr Overhead für die Anwendungsthreads. Das Durchsatzziel für den G1 GC liegt bei 90 Prozent Anwendungszeit und 10 Prozent Speicherbereinigungszeit .
Es gibt einige Änderungen mit Java 7. Schauen Sie sich diesen Artikel an
Siehe Oracle-Dokumentationsseite zu gc und verwandten SE-Fragen:
Java G1 Garbage Collection in der Produktion
quelle
Nein G1 ist kein Standard-Garbage Collector in jdk 1.7.0_02. Der Standard-Garbage Collector hängt von der Maschinenklasse ab. Wenn der Computer der Serverklasse angehört, ist der Standard-Garbage Collector der Throughput Collector. Wenn der Computer der Client-Klasse angehört, ist der Standard-Garbage-Collector Serial Collector.
quelle
Die Dokumentation unter http://www.oracle.com/technetwork/java/javase/tech/g1-intro-jsp-135488.html (der von Wojtek bereitgestellte Link) scheint der einzige offizielle Link mit Informationen zu sein, aber den Informationen scheint veraltet zu sein, da einige der dort genannten Flags nur in den Test-Builds verfügbar waren und in den Produktionsversionen nicht mehr vorhanden sind. Jemand von Oracle sollte eine aktualisierte Dokumentation zum G1 GC bereitstellen.
quelle
Standardmäßig möchten Sie den G1-Kollektor nicht wirklich verwenden, da er nicht wirklich besser ist als die anderen. Es ist nur für spezielle Zwecke gut.
Bei geringer Latenz ist die Anwendung etwas besser als bei CMS, da sie etwas kürzere und vorhersehbarere Pausenzeiten aufweist. Im Gegenzug ist der Durchsatz viel schlechter als bei CMS.
Es ist also nur gut, wenn die Latenz wichtig ist, aber der Durchsatz überhaupt nicht wichtig ist. Wenn beide wichtig sind, bleiben Sie bei CMS.
quelle