Die Verwendung von ZGC mit Multi-Terabyte-Heaps kann mehrere Auswirkungen auf die Leistung haben:
1. Geringe Latenz: ZGC ist darauf ausgelegt, Pausenzeiten zu minimieren und sicherzustellen, dass die Anwendung auch bei großen Heaps reaktionsfähig bleibt. Dies wird dadurch erreicht, dass die meisten Garbage-Collection-Arbeiten gleichzeitig mit der Anwendung ausgeführt werden, was zu Pausenzeiten von weniger als 10 ms führt[3][4].
2. Hoher Durchsatz: ZGC ist darauf ausgelegt, einen hohen Durchsatz zu bieten, indem der Zeitaufwand für die Speicherbereinigung minimiert wird. Dadurch wird sichergestellt, dass die Anwendung auch bei hoher Speicherauslastung weiterhin effizient ausgeführt werden kann[2][4].
3. Multi-Mapping: ZGC verwendet Multi-Mapping, um verschiedene Bereiche des virtuellen Speichers demselben physischen Speicher zuzuordnen. Dies kann zu einer erhöhten Speichernutzung führen, da das Betriebssystem aufgrund der zusätzlichen Zuordnungen möglicherweise eine dreimal höhere Speichernutzung meldet[1].
4. Farbige Zeiger: ZGC verwendet farbige Zeiger, um Metadaten in 64-Bit-Zeigern zu speichern. Dies kann bei der Dereferenzierung von Zeigern zusätzliche Arbeit verursachen, aber die Multi-Mapping-Technik trägt dazu bei, diesen Mehraufwand zu verringern[2].
5. NUMA-fähig: ZGC ist so konzipiert, dass es NUMA-fähig ist, was bedeutet, dass es große Heaps und mehrere CPU-Kerne effizient verarbeiten kann. Dadurch wird sichergestellt, dass der Garbage Collector die verfügbaren Hardwareressourcen nutzen kann[2][4].
6. Optimierungsoptionen: ZGC verfügt über mehrere Optimierungsoptionen, z. B. das Festlegen der maximalen Heap-Größe und der Anzahl gleichzeitiger GC-Threads. Diese Optionen können dazu beitragen, die Speichernutzung und die Leistung der Speicherbereinigung auszugleichen[3][4].
7. Experimentelle Funktion: ZGC ist eine experimentelle Funktion und erfordert zur Aktivierung bestimmte Befehlszeilenoptionen. Es eignet sich für Anwendungen, die sehr kurze Pausenzeiten erfordern und große Speicherzuweisungen bewältigen können[1][3].
Zusammenfassend lässt sich sagen, dass die Verwendung von ZGC mit Multi-Terabyte-Heaps eine geringe Latenz, einen hohen Durchsatz und eine effiziente Speicherverwaltung bieten kann. Es erfordert jedoch eine sorgfältige Abstimmung und kann aufgrund von Multi-Mapping zu einer erhöhten Speichernutzung führen.
Zitate:[1] https://stackoverflow.com/questions/62926652/the-java-zgc-garbage-collector-uses-a-lot-of-memory
[2] https://www.opsian.com/blog/javas-new-zgc-is-very-exciting/
[3] https://docs.oracle.com/en/java/javase/11/gctuning/z-garbage-collector1.html
[4] https://developers.redhat.com/articles/2021/11/02/how-choose-best-java-garbage-collector
[5] https://dzone.com/articles/java-z-garbage-collector-zgc-a-deep-dive-with-exam