您是否在任何项目中使用过PhantomReference?

我唯一了解的PhantomReference

  • 如果使用其 方法,它将始终返回null而不是对象。它有什么用?
  • 通过使用PhantomReference,您可以确保无法从 方法中恢复该对象。

但是这个概念/类的用途是什么?

您是否曾在您的任何项目中使用过此功能,或者在任何示例中应使用此功能?

回答:

PhantomReference在简单,非常专业的内存分析器中使用s来监视对象的创建和销毁。我需要他们追踪破坏。但是这种方法已经过时了。(它于2004年针对J2SE1.4编写。)专业的分析工具功能更强大,更可靠,并且JMX或代理和JVMTI等新的Java 5功能也可以用于此目的。

PhantomReferences(始终与Reference队列一起使用)优于s,finalize但存在一些问题,因此应避免使用。主要是使对象再次可达。这可以通过终结器保护语来避免(->在’EffectiveJava’中了解更多信息)。因此它们也是 。

此外,PhantomReferences

使您可以准确确定何时从内存中删除对象。实际上,它们是确定这一点的唯一方法。通常这没有什么用处,但是在某些非常特殊的情况下(例如处理大图像)可能会派上用场:如果您确定应该对图像进行垃圾回收,则可以等到它实际加载后再尝试加载下一个图像,因此避免发生可怕的OutOfMemoryError的可能性。(引自尼古拉斯。)

就像psd首先写的那样,罗迪·格林(RoedyGreen)有很好的参考文献摘要。

以上是 您是否在任何项目中使用过PhantomReference? 的全部内容, 来源链接: utcz.com/qa/426338.html

回到顶部