2012-07-18 183 views
0

在下面的代碼中,對象矩形可能被垃圾回收器銷燬嗎?垃圾回收Java類

... 
Point point = new Point(2,4); 
Rectangle rectangle = new Rectangle (point, 20, 20); 
point = null; 
... 

我認爲這是合理的,這兩個點和矩形被垃圾收集器,因爲矩形參考點,這是無效被破壞。

+0

問得好+1 – Pooya 2012-07-18 15:50:42

+1

如果rentangle仍在使用,要收集什麼! – 2012-07-18 15:51:36

+0

'Rectangle'實例**不會引用'point' - 它引用的是在您實例化'Rectangle'的行處引用'point'的對象。變量'point'是通過值傳遞的,所以無論你對var做什麼事情都不會對'Rectangle'實例產生任何影響。 – 2012-07-18 16:35:33

回答

1

一個物體變得符合垃圾收集或GC如果它不是來自任何活動線程或任何靜態refrences可達 - 你可以說,如果所有的引用都是空的對象符合垃圾收集。此外,請閱讀參考類型(強,弱,軟&幻影)。

+0

因此,在point = null之後,對象點仍然有一個引用,所以不會收集任何東西。 – 2012-07-18 16:25:02

1

無論對象可以被收集,因爲rectangle指矩形和它引用的Point對象。事實上不再指任何事情都沒有關係。

0

要看什麼矩形的構造函數。它可以存儲對點對象的引用或複製其值。

在第一種情況下,無論對象將是GCed。在第二種情況下,只有點將被GCed。

0

你沒有給很夠一個例子說。一旦它們超出範圍,它們都將有資格獲得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,但它不會更改它用於指向的對象!