Originariamente inviato da LeleFT
Senza sapere nulla delle tue strutture dati, di come le allochi, di quale sia il loro scope, eccetera... l'unico suggerimento che ti posso dare è di richiamare System.gc() quando vuoi "dare una spinta" al Garbage Collector.

Tieni però presente che è solo un "invito" al GC, che può tranquillamente essere ignorato dalla JVM.

Detto questo, io cercherei di capire perchè la memoria esaurisce... il più delle volte ci sono problemi di allocazioni "superflue" di grosse quantità di dati che vanno corrette.

Ciao.
Che informazioni ti potrei dare per avere consigli più dettagliati?

Cioè se ci fosse un modo per dire a Java DEALOCA TUTTO, o dealloca l'oggetto xyz, allora potrei scrivere la struttura dati su file e svuotare la memoria di volta in volta.

Comunque faccio uso principalmente di ArrayList (di float, o di coppie-terne di float) e l'algoritmo per calcolare la rotta su questa mappa è ricorsivo (altra cosa che riempie lo stack).

Ci ho passato giorni a riscrivere e snellire l'algoritmo ed ora non dico che sia ridotto all'osso ma quasi. L'unica idea realmente risolutiva secondo me è riuscire a calcolare questa rotta per pezzi e svuotare la memoria passo per passo.

Ma se io creo l'oggetto xyz, lo uso, faccio quello che devo e poi nel resto del codice non tocco più xyz ma creo un oggetto xyz2 e inizio ad usare questo nuovo oggetto, il garbate collector dovrebbe deallocarmelo xyz?


EDIT: A quanto pare comunque non dealloca anche con quel gc, ovvero un po' di spazio libero in più ce ma non basta. Forse il fatto che richiamo tutto nello stesso scope (ovvero ho due oggetti pesanti dichiarati di fila nello stesso main) fa si che il gc non possa deallocare.