繁体   English   中英

Java中有“智能指针”吗?

[英]Are there “smart pointers” in Java?

Java中的C ++智能指针是否还有什么?

所有Java的“指针”(参考)都是智能指针。

Java在托管环境中运行。 这意味着Java使用垃圾收集器来清理不再引用的变量。

Java的引用虽然与指针略有不同。 Java抽象出你在C ++中看到的所有指针值和数学。 因此,无论何时创建新对象并将其存储到变量,您都将其存储到Java的“智能指针”版本中。

我只听说过内存管理方面的智能指针。 由于内存管理是Java平台的核心,显然没有必要。

我们想到的最接近的匹配是java.lang.ref.WeakReference和java.lang.ref.SoftReference,因为它们允许在某种程度上自定义垃圾收集。

是的,不是。 不,在Java中不存在像指针对象那样的东西。 是的,因为每个物体都是一个“智能指针”,这意味着它可以进行垃圾收集,并可以照顾自己的生命。

不,Java中没有任何类的指针。 通常,您不需要智能指针 ,因为您已经有一个垃圾收集器 ,可以进行引用计数以自动管理内存分配/释放周期。

如果您正在寻找确定性的破坏引用计数 ,这为您提供了对象的生命周期及时控制有效地利用资源(一些东西, 垃圾收集 给你)的目的,那么Java提供了两件事情。

1)最常见的解决方案(全部使用Java)是Closeable / AutoCloseable模式。 这是一个简单的模式。 需要确定性销毁的每个对象都有一个所有者,所有者负责调用close (该对象可能有多个用户,但只有一个所有者。)这用于文件句柄,网络套接字等。

2)一个更罕见的选项是引用计数 ,其中一个对象可以有多个所有者(通常,用户和所有者之间没有明显的区别)。 这就是C ++ shared_ptr实现的目标。 看看almson-refcount ,这是我编写的一个实现引用计数的库。

为了澄清,在处理任何内存资源时,Java中必须进行确定性破坏。 垃圾收集器以其惰性方法有效地管理内存。 但是,您不能依赖垃圾收集器来管理任何其他资源。 这就是为什么在Java 9中不推荐使用finalize原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM