Ciao,
On Wed, Sep 24, 2025 at 4:42 PM Roberto Franchini
<
ro.fra...@gmail.com> wrote:
>
> Una domanda che non ho fatto ieri a @Simone Bordet .
> Meglio ZGC o Shenandoah?
> O forse: ci sono scenari dove uno e' meglio dell'altro?
Personalmente, ho una predilezione per ZGC. L'algoritmo è lo stesso si
Azul Zing C4, l'implementazione è diversa, ma comunque siamo su piani
simili.
L'attività su ZGC è quella che fa da driver per tutti gli altri GC.
Ci sono state diverse features che sono state proposte dal team di
ZGC, implementate in ZGC e solo dopo portate su G1 e altri GCs, quindi
la ricerca è su ZGC e sai che sei sempre all'avanguardia.
E questo vale per OpenJDK in generale, non solo per Oracle JDK.
Detto questo, non ho seguito gli ultimi dettagli di Shenandoah.
L'ultima volta che ho guardato Shenandoah usava un forward pointer
piazzato _prima_ dell'object header, mentre ZGC usa colored pointers.
Questo vuol dire che Shenandoah usa più memoria, un po' in contrasto
con Compressed Object Headers, mentre ZGC usa dei bits nel puntatore e
non richiede memoria in più.
C'era comunque in programma per Shenandoah di rimuovere il forward
pointer e sovrascrivere direttamente l'object header, quindi magari
non è più un problema.
Però Shenandoah è disponibile per Java 8, credo x32, e supporta
compressed oops per heap < 32 GiB.
Alla fine dovete provare e fare dei benchmarks per il vostro caso.
Penso che in entrambi i casi si tratti di vedere quanta CPU in più
consumano ma credo che per entrambi si passi da una automobile
utilitaria a un aeroplano.
Magari c'è differenza tra i due aeroplani, ma il problema di fare GC
in modo efficiente a pausa zero è risolto.
DI ZGC mi piace anche l'autotuning e il GC logging con statistiche
avanzate (non so in Shenandoah).
Se fate dei benchmarks, fare sapere i risultati :)
--
Simone Bordet
---
Finally, no matter how good the architecture and design are,
to deliver bug-free software with optimal performance and reliability,
the implementation technique must be flawless. Victoria Livschitz