Java循环引用,糟糕的风格?

标签 java memory-management reference garbage-collection

我正在研究树结构,其中事件必须能够向下传播到根元素。同时我使用访问者模式来序列化这棵树。向访问者提供对根的引用,并沿着树向上移动。

因此我需要使用某种循环引用(对于事件, child 需要知道其 parent ,对于访问者, parent 需要知道所有 child )。

class TreeNode {
    List<TreeNode> children;
    TreeNode parent;
    ...
}

我现在想分解这些循环引用。释放根节点,应该会自动释放整个树的其余部分。

我一直在试验 parent 字段的弱引用。我遇到了空指针异常,因为 java 释放了父字段,该字段随后被事件访问。

如何解决?

最佳答案

Java 垃圾回收足够聪明,不会被循环引用所愚弄。一旦没有对树的强引用,那么整个包含循环引用的树都将被垃圾收集。

您需要做的就是确保没有从树外部到树内部任何地方的引用。

如果事件正在访问父字段,则表明某些内容仍然具有引用。您将需要清理它(无论您是否删除循环引用)。

关于Java循环引用,糟糕的风格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22718123/

相关文章:

java - 尝试用java程序减去二进制数小错误

java程序接受任何格式的日期作为输入并打印月份,

c++ - 类方法会增加类实例的大小吗?

swift - 分配手动分配的 UnsafeMutablePointer<String>

visual-studio-2008 - VS2008.NET : Getting a referenced project's dependencies to copy to main project's bin folder

java - java中的递归函数用字典填充二叉树

java - 从 long 到 int 的可能有损转换,JAVA

java - 将 java 数组 "over"复制到另一个

algorithm - "2D memory management"的高效算法

声明引用的 C++ 成本?