簡體   English   中英

組合對象的垃圾收集

[英]Garbage collection of Composed Objects

我有兩節課

Class A
{
    //constructor
}

Class B
{
    private A a;

    public B()
    {
        a = new A();
    }
}

假設我在我的代碼中使用了B [對象b ]的對象,在我最終使用它之后,我將其設置為null 我知道B的對象現在可用於垃圾收集。

我知道在將b設置為null后,它將立即有資格進行垃圾回收嗎? 但是A型的對象怎么樣? 將B設置為null后,它是否可以立即用於垃圾收集? B收集垃圾是否有資格進行垃圾收集

從理論上說,直到垃圾回收B, a仍然有它的參考? 因此,SUN JVM編譯器在設置b = null后立即檢測到這一點;

GC非常智能,可以跟蹤對象圖形中的路徑,以檢查是否可以訪問對某個對象的現有引用。 它甚至可以檢測周期(比如,你的情況,如果b保持為參考aa召開參考b

一旦沒有對b的硬引用,就無法達到對a的引用,因此據我所知,兩者都有資格進行垃圾回收。

一般來說,你不應該在乎。 它無法訪問,你應該讓垃圾收集擔心其余部分。 由於它變得無法訪問,因此應立即收集。

運行Java程序(至少使用Sun JVM)時,還可以使用一些標志,這些標志將提供有關垃圾收集過程中發生的事情的一些調試信息。 試試-verbose:gc選項。

http://download.oracle.com/javase/6/docs/technotes/tools/solaris/java.html

只要將ObjectB設置為null(*條件是ObjectA未被任何其他活動對象引用),對象A也將成為符合條件的垃圾回收。 這種情況被稱為“隔離島”。

是對這種情況的一個很好的解釋。 是SCJP書的另外一個解釋)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM