1
我正在研究樹狀結構,其中事件必須能夠傳播到根元素。同時我使用訪問者模式來序列化這棵樹。訪問者提供了一個對根的引用,並向上傳播。Java循環引用,壞風格?
因此,我需要使用某種循環引用(對於孩子需要知道其父母的事件,父母需要知道所有孩子的訪問者)。
class TreeNode {
List<TreeNode> children;
TreeNode parent;
...
}
我現在想分解這些循環引用。釋放根節點,應該自動釋放整個樹的其餘部分。
我一直在試驗parent
這個字段的弱引用。我得到了空指針異常,因爲java釋放了之後被事件訪問的父字段。
如何解決這個問題?
你確定你確實有問題嗎?如果沒有人持有對樹的任何元素的引用,Java將很樂意循環收集。你的數據結構意味着任何TreeNode都會使整個樹留在內存中,但爲什麼你認爲這是一個問題? –
按照慣例,只有樹葉和根是從外部引用的。基本上我到現在還沒有經歷過任何記憶問題。我只是不知道java能夠清理那些繼續引用自己的「內存島」。 – gorootde