2013-03-07 118 views
0

我有6個獨立的java Classes A,B,C,D,E and F垃圾收集資格對象

Class A創建Class B的對象,並調用Class B中的方法。

Class B方法創建class C的對象並調用class C中的方法。

Class C方法創建一個對象D,E,F類並調用它們的方法。

當finally控件最後回到class A時,如果我將Class B的對象引用設置爲null,這是否會使創建的所有對象class B,C,D,E,F到目前爲止符合垃圾回收的條件?

+0

我想你是指所提到的圖中的所有對象。並非給定類中的所有對象。如果上述類型的對象在其他地方構建,則不會被GC'ed – 2013-03-15 12:56:50

回答

0

是的。它會。由於父類現在被引用爲null並且是孤立的,因此它下面的所有引用對象都將符合GC的條件。

當沒有更強的引用存在時,對象將進入不可訪問狀態。當一個對象不可達,它是集合的候選人

的http:// 192.9.162.55 /docs/books/performance/1st_edition/html/JPAppGC.fm.html

+0

請檢查以下鏈接:http://stackoverflow.com/questions/2433261/when-and-how-are-classes-garbage-collected -in-java – 2013-03-07 06:21:52

0

是的,他們將有資格垃圾回收提供了一個條件,如果它們是在方法內創建的,即在本地,那麼它們是合格的,並且如果它們是實例變量對象,則只有該對象被設置爲null的副本纔有資格獲得gc。

+0

B類的對象引用是一個單獨的本地對象,這將使得C,D,E,F類的所有對象都符合gc? – user1929905 2013-03-07 06:37:53

+0

不,你應該知道basic.For每個對象,所有的實例變量有不同的副本。所以如果你給B的一個對象分配null,那麼只有在該對象內部的副本(它們是C,D,E,F對象)將被垃圾收集。 – 2013-03-07 06:45:18

+0

搜索這些基本的東西,你會得到很多東西來閱讀。 – 2013-03-07 06:45:51

0

是的。 「當沒有更多對該對象的引用時,對象有資格進行垃圾回收。」

所以如果b不再被引用,它有資格申請gc。反過來,它被收集,沒有更多的參考c,所以c變得合格,故事繼續。

0

一般是的,但沒有更多的信息,我們不能肯定地說。
最好的例子是,如果說C放置了它在存儲在http會話或EJB事務(或直接存儲引用)的集合中創建的D實例的引用。如果發生這種情況,那些引用將會阻止D的相關實例被垃圾收集,並且它們保留的所有內容都會被引用。

+0

我的課程使用集合,但不使用httpsession或ejb相關的東西,他們現在有資格嗎? – user1929905 2013-03-07 06:57:11

+0

@ user1929905取決於。只要集合中存在引用,並且該集合本身不適合垃圾收集,則引用指向的實例也不符合條件。因此,如果您在類中調用了A中的一個集合,該集合已傳遞給A上的一個方法,該集合添加了對集合B的引用,只要該集合保留在該集合中,B就會保留,除非集合本身已被刪除。 – jwenting 2013-03-07 07:48:27