您是否在任何项目中使用过PhantomReference?
我唯一了解的PhantomReference
是
- 如果使用其 方法,它将始终返回
null
而不是对象。它有什么用? - 通过使用
PhantomReference
,您可以确保无法从 方法中恢复该对象。
但是这个概念/类的用途是什么?
您是否曾在您的任何项目中使用过此功能,或者在任何示例中应使用此功能?
回答:
我PhantomReference
在简单,非常专业的内存分析器中使用s来监视对象的创建和销毁。我需要他们追踪破坏。但是这种方法已经过时了。(它于2004年针对J2SE1.4编写。)专业的分析工具功能更强大,更可靠,并且JMX或代理和JVMTI等新的Java 5功能也可以用于此目的。
PhantomReference
s(始终与Reference队列一起使用)优于s,finalize
但存在一些问题,因此应避免使用。主要是使对象再次可达。这可以通过终结器保护语来避免(->在’EffectiveJava’中了解更多信息)。因此它们也是 。
此外,PhantomReference
s
使您可以准确确定何时从内存中删除对象。实际上,它们是确定这一点的唯一方法。通常这没有什么用处,但是在某些非常特殊的情况下(例如处理大图像)可能会派上用场:如果您确定应该对图像进行垃圾回收,则可以等到它实际加载后再尝试加载下一个图像,因此避免发生可怕的OutOfMemoryError的可能性。(引自尼古拉斯。)
就像psd首先写的那样,罗迪·格林(RoedyGreen)有很好的参考文献摘要。
以上是 您是否在任何项目中使用过PhantomReference? 的全部内容, 来源链接: utcz.com/qa/426338.html