C'è molto da dire nel prendere il tempo per testare le varie impostazioni di garbage collection, ma come menzionato sopra di solito non è utile farlo.
Attualmente sto lavorando a un progetto che coinvolge un ambiente con memoria limitata e una quantità relativamente grande di dati: ci sono alcuni grandi pezzi di dati che spingono il mio ambiente al limite, e anche se sono stato in grado di ridurre l'utilizzo della memoria così che in teoria dovrebbe funzionare bene, riceverei ancora errori di spazio sull'heap --- le opzioni GC dettagliate mi hanno mostrato che stava tentando di raccogliere i rifiuti, ma senza alcun risultato. Nel debugger, potrei eseguire System.gc () e abbastanza sicuro ci sarebbe "abbondanza" di memoria disponibile ... non molto extra, ma abbastanza.
Di conseguenza, l'unica volta che la mia applicazione chiama System.gc () è quando sta per entrare nel segmento di codice dove verranno allocati grandi buffer necessari per l'elaborazione dei dati, e un test sulla memoria libera disponibile indica che non lo sono garantito per averlo. In particolare, sto osservando un ambiente da 1 GB in cui almeno 300 MB sono occupati da dati statici, con la maggior parte dei dati non statici relativi all'esecuzione tranne quando i dati in elaborazione sono almeno 100-200 MB a la fonte. Fa tutto parte di un processo di conversione automatica dei dati, quindi tutti i dati esistono per periodi di tempo relativamente brevi a lungo termine.
Sfortunatamente, sebbene siano disponibili informazioni sulle varie opzioni per la messa a punto del garbage collector, sembra in gran parte un processo sperimentale e le specifiche di livello inferiore necessarie per capire come gestire queste situazioni specifiche non sono facilmente ottenibili.
Detto questo, anche se sto utilizzando System.gc (), ho comunque continuato a sintonizzarmi utilizzando i parametri della riga di comando e sono riuscito a migliorare il tempo di elaborazione complessivo della mia applicazione di una quantità relativamente significativa, nonostante non sia stato in grado di superare il ostacolo posto dal lavorare con i blocchi di dati più grandi. Detto questo, System.gc () è uno strumento ... uno strumento molto inaffidabile, e se non stai attento a come lo usi, vorresti che non funzionasse il più delle volte.