警告: 这是一个语言问题,但我100%肯定非技术人员将无法回答我。
关于PhantomReference
的Java文档定义quote:
虚拟参考对象,在收集器之后排队 确定可以否则收回其推荐人。幻影 引用最常用于安排事后清理 动作。假设垃圾收集器在某个点确定 在一个对象是幻影可达的时间。那时它将 原子清除该对象的所有幻像引用和所有幻像 引用从中引用的任何其他幻影可到达对象 对象是可到达的。在同一时间或以后 排队那些已注册的新清除的幻象引用 带有参考队列。
为了确保保留可回收对象,引用对象 的幻像引用可能无法检索: 幻像引用始终返回null。
我不明白第一句话。恰好我不理解第一句话中的否则的含义。从我的角度来看,它可能会被删除。但是我检查了Java doc中是否有以前的Java版本,并且自从Java 1.5以来,这句话一直没有改变。
根据我对这个主题的理解,我可以这样改写第一句话:
要创建PhantomReference,我们必须通过构造函数传递Referent和ReferenceQueue实例。当GC知道引用对象可能会被删除(它保留的内存可能是空闲的)时,它将与该引用对象相关的PhantomReference添加到ReferenceQueue对象。
是真的吗?
第一句话中其他方面的威胁是什么?