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

标签 java smart-pointers refcounting

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

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

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

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

但是,似乎没有办法在 Java 中自动进行引用计数。我需要进行引用计数以了解何时从表中逐出一个节点(以便它可以被垃圾收集),我真的想避免调用 node->incRef()node->decRef() 在每个函数的开始和结束处。

我们如何在 Java 中实现这个 C++ 习惯用法?

最佳答案

在 Java 中,引用调查和垃圾是自动的。

但这并不意味着它是完全隐藏的。

你似乎需要ReferenceQueue如果你想知道一个对象什么时候可以被丢弃,可能是WeakReference如果你想保留不防止垃圾的指针。

我建议你看看java.lang.ref package的描述找到满足您需求的最佳解决方案。

关于java - Java 中的智能指针和引用计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12429091/

相关文章:

c++ - std::make_unique 和 std::unique_ptr 与 new 的区别

objective-c - ARC 迁移器在其他目标中返回错误

java - 对角线元素应等于非对角线元素之和

java - 如何获取 Android 中的所有联系人并忽略仅电子邮件联系人

c++ - 在智能指针的双图中查找原始指针

字符串 := const : why different implementation for local and result?

c - 如何避免释放存储在具有相同引用计数的容器中的对象

java - 安卓.view.InflateException : Binary XML file line #4: Error inflating class SwitchPreference

java - MQ何时抛出JMS异常 'MQJMS1022: failed to redirect message'?

c++11 - Enable_shared_from_this 对象的两步构造需要将 std::shared_ptr<self> 传递给构造函数中创建的子级