Sto combattendo per problemi di memoria con la mia applicazione e sto cercando di capire come funziona la garbage collection. Se ho il seguente codice:A che punto è esattamente un oggetto disponibile per la garbage collection?
public void someMethod() {
MyObject myObject = new MyObject();
myObject.doSomething(); //last use of myObject in this scope
doAnotherThing();
andEvenMoreThings();
}
Quindi la mia domanda è, sarà myObject
disponibile per la raccolta dei rifiuti dopo myObject.doSomething()
che è l'ultimo uso di questo oggetto, o dopo il completamento di someMethod()
dove viene fuori del campo di applicazione? Cioè la garbage collection è abbastanza intelligente da vedere che sebbene una variabile locale sia ancora in ambito, non verrà utilizzata dal resto del codice?
Penso che stai usando "dereferenziato" nel contesto sbagliato. – isah
Solo perché il garbage collector vede che non è usato non man che sceglierà di liberarlo subito - non dovresti scrivere codice che dipende dal comportamento di un evento imprevedibile;) SE hai problemi di memoria probabilmente stai mantenendo i riferimenti a qualcosa per errore :( – deanWombourne
Hmm, grazie isah, penso che tu abbia ragione, aggiornerò il titolo alla domanda: –