7.1* Come scegliere il giusto raccoglitore di rifiuti
Se la tua applicazione non ha requisiti di latenza rigorosi, dovresti semplicemente eseguire l'applicazione e lasciare che la JVM stessa scelga il raccoglitore giusto.
Nella maggior parte dei casi, le impostazioni predefinite funzionano correttamente. Se necessario, è possibile regolare la dimensione dell'heap per migliorare le prestazioni. Se le prestazioni continuano a non essere quelle previste, prova a modificare il raccoglitore per adattarlo ai requisiti della tua applicazione.
- Sequenziale . Se l'applicazione dispone di un piccolo set di dati (fino a circa 100 MB) e/o verrà eseguita su un singolo processore senza requisiti di latenza.
- Parallelo . Se la priorità è il picco delle prestazioni dell'applicazione e non ci sono requisiti di latenza (oppure sono accettabili pause di almeno un secondo).
- CM/G1 . Se il tempo di risposta è più importante della velocità effettiva complessiva e le pause di Garbage Collection devono essere inferiori a un secondo.
- ZGC . Se il tempo di risposta è ad alta priorità e/o è coinvolto un heap molto grande.
7.2* Raccomandazioni per la raccolta dei rifiuti
Evita i trigger manuali
Oltre ai meccanismi di base della raccolta dei rifiuti, uno dei punti più importanti di questo processo in Java è che non è deterministico. Cioè, è impossibile prevedere quando si verificherà esattamente in fase di esecuzione.
Utilizzando i metodi System.gc() o Runtime.gc(), puoi includere un suggerimento nel tuo codice per avviare il Garbage Collector, ma ciò non garantisce che verrà effettivamente eseguito.
Usa gli strumenti di analisi
Se non si dispone di memoria sufficiente per eseguire l'applicazione, si verificheranno rallentamenti, lunghi tempi di garbage collection, eventi "world stop" e infine errori di memoria insufficiente. Ciò potrebbe indicare che l'heap è troppo piccolo, ma potrebbe anche indicare che l'applicazione presenta una perdita di memoria.
È possibile utilizzare uno strumento di monitoraggio come jstat o Java Flight Recorder per vedere se l'utilizzo dell'heap aumenta indefinitamente, il che potrebbe indicare un bug nel codice.
Preferisci le impostazioni predefinite
Se si dispone di una piccola applicazione Java autonoma, probabilmente non sarà necessario configurare la raccolta dei rifiuti. Le impostazioni predefinite ti serviranno bene.
Usa i flag JVM per personalizzare
L'approccio migliore per configurare la raccolta dei rifiuti in Java consiste nell'impostare i flag JVM. I flag possono essere utilizzati per impostare il Garbage Collector (ad esempio Serial, G1 e così via), la dimensione iniziale e massima dell'heap, la dimensione delle partizioni dell'heap (ad esempio Young generation, Old generation) e molto altro Di più.
Scegli il rubinetto giusto
Una buona linea guida in termini di impostazioni iniziali è la natura dell'applicazione personalizzata. Ad esempio, il Garbage Collector simultaneo è efficiente, ma spesso genera eventi "world stop", rendendolo più adatto per l'elaborazione interna in cui sono accettabili lunghe pause.
Allo stesso tempo, il Garbage Collector CMS è progettato per ridurre al minimo la latenza, il che lo rende ideale per le applicazioni Web in cui la reattività è importante.