【发布时间】:2015-09-29 14:02:19
【问题描述】:
为什么需要软/弱/幻像引用而不是使对象为空。 我不清楚为什么我们需要使用这些参考资料。
据我了解,内部对象可能为空,但外部对象是可访问的,那么内部对象不会被垃圾收集,要收集内部对象,我们需要使用软/弱/幻像引用。这是正确的还是我们有其他理由使用它?
我在现代 JVM 处理此内部对象后的堆栈溢出后读到其中一个为空,然后被垃圾收集,我无法找到有关此的更多详细信息。
提前致谢。
【问题讨论】:
为什么需要软/弱/幻像引用而不是使对象为空。 我不清楚为什么我们需要使用这些参考资料。
据我了解,内部对象可能为空,但外部对象是可访问的,那么内部对象不会被垃圾收集,要收集内部对象,我们需要使用软/弱/幻像引用。这是正确的还是我们有其他理由使用它?
我在现代 JVM 处理此内部对象后的堆栈溢出后读到其中一个为空,然后被垃圾收集,我无法找到有关此的更多详细信息。
提前致谢。
【问题讨论】:
像WeakHashMap 这样的数据结构在键上使用WeakReference。
基本上这个想法是,如果在您的代码中有对某个键的引用,则与该键对应的值将保存在 Map 中。
如果您的代码中没有更多对该键的引用,则关联的值可能是垃圾收集器的候选对象。
来自java doc:
Map 接口的基于哈希表的实现,带有弱键。 WeakHashMap 中的条目在其键不再常用时将被自动删除。更准确地说,给定键的映射的存在不会阻止该键被垃圾收集器丢弃,也就是说,使其可终结,最终确定,然后回收。当一个键被丢弃时,它的条目实际上从映射中删除,所以这个类的行为与其他映射实现有些不同。
如果没有WeakReference,则无法获得此行为
【讨论】: