L'uso di ZGC con cumuli multi-kerabyte può avere diverse implicazioni per le prestazioni:
1. Latenza bassa: ZGC è progettato per ridurre al minimo i tempi di pausa, garantendo che l'applicazione rimanga reattiva anche con grandi cumuli. Lo raggiunge eseguendo la maggior parte dei lavori di raccolta dei rifiuti contemporaneamente all'applicazione, con conseguenti tempi di pausa inferiori a 10 ms [3] [4].
2. ALTER THOUTPUT: ZGC è progettato per fornire un elevato throughput minimizzando il tempo trascorso sulla raccolta dei rifiuti. Ciò garantisce che l'applicazione possa continuare a funzionare in modo efficiente anche sotto un pesante utilizzo della memoria [2] [4].
3. Multi-mapping: ZGC utilizza multi-mappatura per mappare diverse gamme di memoria virtuale alla stessa memoria fisica. Ciò può portare ad un aumento dell'utilizzo della memoria, poiché il sistema operativo può segnalare un consumo di memoria più grande 3x a causa delle mappature aggiuntive [1].
4. Punti colorati: ZGC utilizza puntatori colorati per conservare i metadati in puntatori a 64 bit. Questo può creare ulteriore lavoro quando dereferencing puntatori, ma la tecnica multi-mappatura aiuta a mitigare questo sovraccarico [2].
5. NUMA-ASSIDE: ZGC è progettato per essere consapevole di NUMA, il che significa che può gestire in modo efficiente cumuli di grandi dimensioni e più core della CPU. Ciò garantisce che il Garbage Collector possa sfruttare le risorse hardware disponibili [2] [4].
6. Opzioni di ottimizzazione: ZGC ha diverse opzioni di ottimizzazione, come l'impostazione della dimensione massima del heap e il numero di thread GC simultanei. Queste opzioni possono aiutare a bilanciare l'utilizzo della memoria e le prestazioni della raccolta dei rifiuti [3] [4].
7. Funzionalità sperimentale: ZGC è una funzione sperimentale e richiede opzioni specifiche della riga di comando per abilitare. È adatto per applicazioni che richiedono tempi di pausa molto brevi e possono gestire grandi allocazioni di memoria [1] [3].
In sintesi, l'utilizzo di ZGC con cumuli multi-kerabyte può fornire bassa latenza, throughput elevato e una gestione efficiente della memoria. Tuttavia, richiede un'attenta accordatura e può portare ad un aumento dell'utilizzo della memoria a causa della multi-mappatura.
Citazioni:[1] https://stackoverflow.com/questions/62926652/the-java-zgc-garbage-ocollector-uses-a-lot-ofmory
[2] https://www.opsian.com/blog/javas-new-zgc-is-very-exciting/
[3] https://docs.oracle.com/en/java/javase/11/gctuning/z-garbage-conlector1.html
[4] https://developers.redhat.com/articles/2021/11/02/how-choose-best-java-gage-collector
[5] https://dzone.com/articles/java-z-gage-ocollector-zgc-adeep-dive-with-exam