我讀過的Java垃圾收集器是足夠聰明,處理循環引用(A-> B和B-> A,或者A-> B,B-> C和C→A)。但是,我們有涉及三個我們班的內存泄漏問題,我想知道,如果他們的相互關係有什麼用它做。 這是他們的一個簡化版本:內存泄漏涉及循環引用和數組
public class A {
List<B> bes;
}
public class B {
A a;
C c;
}
public class C {
List<B> bes;
}
所以,你可以看到,這樣的設計不僅創造關係(A-> B,B-> C,C-> B和B-鏈> A),而且它也涉及在兩側的中間(B類的多個實例)。
這也是我的理解,這不是標準的Java應用程序的問題,因爲所有的對象綁定到執行的主線程(公共靜態無效的主要(字符串[]參數))。然而,我們的節目住的應用服務器(IBM的Websphere)內,所以沒有主要方法。
我們確實知道存在內存泄漏,並且涉及這三個類(基於堆的內存分析結果),我想知道是否有可能組合了這些情況正在造成泄漏。
注意:值得注意的是,關係是單向的。例如,C的實例擁有對B列表的引用,但這些B不指向C,並且它們指向的As不具有返回B的引用。
如果關係*絕對*是單向的,沒有循環引用。 –