在下面的代碼中,對象矩形可能被垃圾回收器銷燬嗎?垃圾回收Java類
...
Point point = new Point(2,4);
Rectangle rectangle = new Rectangle (point, 20, 20);
point = null;
...
我認爲這是合理的,這兩個點和矩形被垃圾收集器,因爲矩形參考點,這是無效被破壞。
在下面的代碼中,對象矩形可能被垃圾回收器銷燬嗎?垃圾回收Java類
...
Point point = new Point(2,4);
Rectangle rectangle = new Rectangle (point, 20, 20);
point = null;
...
我認爲這是合理的,這兩個點和矩形被垃圾收集器,因爲矩形參考點,這是無效被破壞。
一個物體變得符合垃圾收集或GC如果它不是來自任何活動線程或任何靜態refrences可達 - 你可以說,如果所有的引用都是空的對象符合垃圾收集。此外,請閱讀參考類型(強,弱,軟&幻影)。
因此,在point = null之後,對象點仍然有一個引用,所以不會收集任何東西。 – 2012-07-18 16:25:02
無論對象可以被收集,因爲rectangle
指矩形和它引用的Point對象。事實上不再指任何事情都沒有關係。
要看什麼矩形的構造函數。它可以存儲對點對象的引用或複製其值。
在第一種情況下,無論對象將是GCed。在第二種情況下,只有點將被GCed。
你沒有給很夠一個例子說。一旦它們超出範圍,它們都將有資格獲得GC,這是包括聲明在內的最接近的一系列大括號。
假設矩形的類型Point的領域內,它存儲你通過它的點:
{
Point point = new Point(2,4);
Rectangle rectangle = new Rectangle (point, 20, 20);
point = null;
//No GC yet!
}
//Now they can be GC'd
設置點參考空無關這個真的。如果沒有其他參考文獻,GC將識別「通告」參考並收集兩個對象。將你的點變量設置爲空不會如果存儲了它的副本,則無效矩形內的點! point = null;
將該指針的值設置爲null,但它不會更改它用於指向的對象!
問得好+1 – Pooya 2012-07-18 15:50:42
如果rentangle仍在使用,要收集什麼! – 2012-07-18 15:51:36
'Rectangle'實例**不會引用'point' - 它引用的是在您實例化'Rectangle'的行處引用'point'的對象。變量'point'是通過值傳遞的,所以無論你對var做什麼事情都不會對'Rectangle'實例產生任何影響。 – 2012-07-18 16:35:33