使用弱(或软等)引用作为树中的父引用是否值得?

时间:2012-02-05 22:09:09

标签: java garbage-collection weak-references

对于GC效率而言 - 对于给定的堆大小,定期GC扫描停顿时间更短和/或更少,它是否在父子树中支付使用子引用中的弱引用来引用其父引用以防止GC引用循环?或者差别可以忽略不计?

澄清我的意思是使用强引用的弱引用而不是。可以假设我需要访问子节点中的父节点和父节点中的子节点,因为在遍历之外需要访问。

3 个答案:

答案 0 :(得分:2)

Java没有引用循环的问题,所以如果那是你唯一关注的问题,那么不,你不需要对父引用使用弱/软引用。

答案 1 :(得分:0)

我不是JVM内部的专家,但似乎更糟。当通过强链接无法访问对象时,软/弱链接会发挥作用。传出链接不应影响对象对垃圾收集的资格。到父母的链接是外向的。考虑两种情况:

  • 儿童有资格进行垃圾收集,祖先符合资格 太。我希望所有树都有资格获得垃圾 采集。
  • 儿童没有资格进行垃圾收集 与祖先没有强大的联系。如果祖先只能到达 通过薄弱的环节然后他们应该被GCed。这会影响吗? 程序的正确性?

在谈论性能写作时,无GC的程序比使用较弱的引用类型提供了更多的可预测性。编写GC-free是处理垃圾收集的一种优选方式(如果这是你性能问题的原因)

有关详细信息,请参阅Memory Management in the Java Hotspot Virtual Machine白皮书。

答案 2 :(得分:0)

这取决于你如何使用你的树。

如果您不需要树的父元素并且没有从应用程序的其他部分引用父元素,则可能需要使用从子级到父级的某种弱引用。请记住,您将允许您的父元素被任意垃圾收集。此外,您的树必须非常大才能看到定期GC的任何差异。

当然,如果您不需要一致地引用父元素,我会考虑不保留父参数。这将使您的实现更加一致,不那么复杂。