Zajmuję się problemami z pamięcią w mojej aplikacji i próbuję się skupić na zbieraniu śmieci. Jeśli mam następujący kod:W którym miejscu jest dokładnie dostępny obiekt do zbierania śmieci?
public void someMethod() {
MyObject myObject = new MyObject();
myObject.doSomething(); //last use of myObject in this scope
doAnotherThing();
andEvenMoreThings();
}
Więc moje pytanie jest, będzie myObject
być dostępny do zbierania śmieci po myObject.doSomething()
który jest ostatnim korzystanie z tego obiektu lub po zakończeniu someMethod()
gdzie chodzi poza zakresem? To znaczy. czy kolekcja śmieci jest na tyle sprytna, że chociaż zmienna lokalna jest nadal w zasięgu, to nie będzie używana przez resztę kodu?
Myślę, że używasz "dereferencji" w złym kontekście. – isah
Tylko dlatego, że garbage collector widzi, że nie jest używane, nie oznacza, że zdecyduje się go od razu uwolnić - nie powinieneś pisać kodu, który zależy od zachowania nieprzewidywalnego zdarzenia;) JEŚLI masz problemy z pamięcią wtedy prawdopodobnie przez pomyłkę zachowujesz odniesienia do czegoś :( – deanWombourne
Hmm, dziękuję, taa, myślę, że masz rację, zaktualizuję tytuł do pytania: –