[英]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
保持為參考a
和a
召開參考b
。
一旦沒有對b的硬引用,就無法達到對a的引用,因此據我所知,兩者都有資格進行垃圾回收。
一般來說,你不應該在乎。 它無法訪問,你應該讓垃圾收集擔心其余部分。 由於它變得無法訪問,因此應立即收集。
運行Java程序(至少使用Sun JVM)時,還可以使用一些標志,這些標志將提供有關垃圾收集過程中發生的事情的一些調試信息。 試試-verbose:gc選項。
http://download.oracle.com/javase/6/docs/technotes/tools/solaris/java.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.