Java中的智能指针和引用计数

Jos*_*tor 7 java smart-pointers refcounting

我正在尝试用Java编写DagNode类,其中两个节点在逻辑上是相等的,如果它们等于作为引用.

C++中的想法 - (我来自C++) - 将使用智能指针和引用计数:

  • 创建节点时,如果该节点已存在,我将在某个表中查找.如果是这样,我会返回指向旧指针的指针.否则,请创建一个新节点.

  • 重载构造函数和析构函数等重载的C++方法将执行引用计数,当节点的引用计数降为0时,该节点将从上述表中逐出.(C++也将释放内存.)

但是,似乎没有办法在Java中自动进行ref-counting.我需要做裁判计数知道何时驱逐从表中的一个节点(以便它可以被垃圾收集),我真的想避免调用node->incRef(),并node->decRef()在每个函数的开始和结束.

我们如何在Java中使用这个C++习语?

Den*_*ret 6

在Java中,参考调查和垃圾是自动的.

但这并不意味着它完全隐藏起来.

如果你想知道什么时候可以使用对象,你似乎需要ReferenceQueue,如果你想保留不防止垃圾的指针,你可能需要WeakReference.

我建议你看一下java.lang.ref包的描述,找到最适合你需要的解决方案.

  • Java中的引用计数不是自动的 - Java GC根本不依赖于引用计数. (3认同)