Przeczytałem niektóre przewodniki po śmieciach w Internecie, ale nadal jestem trochę niejasny i chciałem się upewnić, że nie mam przecieków pamięci w moim kodzie.Czy Java GC niszczy obiekty, jeśli zmienne instancji nadal mają odniesienie?
Czy Java GC zbiera obiekty, które utraciły swoje odniesienie, ale jego zmienne nadal mają odniesienie?
Więc powiedzmy, że mam SomeObject:
public class SomeObject {
public ObjectVar var;
public SomeObject() {
var = new ObjectVar();
}
}
A mój kod:
SomeObject obj1 = new SomeObject();
SomeObject obj2 = new SomeObject();
obj2.var = obj1.var;
obj1 = null;
Więc obj1 za var ma odniesienie, ale obj1 nie ma już żadnego odniesienia. Czy GC zniszczy obj1, ale zachowa var żywy? (Zakładam, że tak, po prostu chciałem się upewnić). Dzięki!
Podstawową regułą dla GC jest to, że jeśli GC'ing obiekt wpłynie na twój program, tak się nie stanie. (O ile nie używasz specjalistycznych narzędzi dbających o GC, ale jeśli używasz tego, będziesz wiedział.) –
Możesz przeczytać o ["Kryzys wieku średniego"] (http: //blogs.msdn. com/b/ricom/archive/2003/12/04/41281.aspx). – Mehrdad