Používanie ZGC s viacterabajtovými haldami môže mať niekoľko vplyvov na výkon:
1. Nízka latencia: ZGC je navrhnutý tak, aby minimalizoval časy pauzy, čím sa zaisťuje, že aplikácia zostáva citlivá aj pri veľkých hromadách. Dosahuje to vykonávaním väčšiny prác na zber odpadu súčasne s aplikáciou, čo má za následok časy pauzy kratšie ako 10 ms[3][4].
2. Vysoká priepustnosť: ZGC je navrhnutý tak, aby poskytoval vysokú priepustnosť minimalizovaním času stráveného zberom odpadu. To zaisťuje, že aplikácia môže naďalej efektívne bežať aj pri veľkej spotrebe pamäte[2][4].
3. Multi-Mapping: ZGC používa multi-mapovanie na mapovanie rôznych rozsahov virtuálnej pamäte na rovnakú fyzickú pamäť. To môže viesť k zvýšenému využívaniu pamäte, pretože operačný systém môže hlásiť 3x väčšie využitie pamäte v dôsledku dodatočných mapovaní[1].
4. Farebné ukazovatele: ZGC používa farebné ukazovatele na ukladanie metadát v 64-bitových ukazovateľoch. To môže priniesť ďalšiu prácu pri dereferencovaní ukazovateľov, ale technika viacnásobného mapovania pomáha zmierniť túto réžiu[2].
5. NUMA-Aware: ZGC je navrhnutý tak, aby podporoval NUMA, čo znamená, že dokáže efektívne zvládnuť veľké hromady a viacero jadier CPU. To zaisťuje, že zberač odpadu môže využívať dostupné hardvérové prostriedky[2][4].
6. Možnosti ladenia: ZGC má niekoľko možností ladenia, ako je nastavenie maximálnej veľkosti haldy a počtu súbežných vlákien GC. Tieto možnosti môžu pomôcť vyvážiť využitie pamäte a výkon zberu odpadu[3][4].
7. Experimentálna funkcia: ZGC je experimentálna funkcia a vyžaduje špecifické možnosti príkazového riadka na aktiváciu. Je vhodný pre aplikácie, ktoré vyžadujú veľmi krátke prestávky a dokážu spracovať veľké alokácie pamäte[1][3].
Stručne povedané, použitie ZGC s multi-terabajtovými haldami môže poskytnúť nízku latenciu, vysokú priepustnosť a efektívnu správu pamäte. Vyžaduje si to však starostlivé ladenie a môže viesť k zvýšenému využívaniu pamäte v dôsledku viacnásobného mapovania.
Citácie:[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