需要了解柔软/弱/虚幻的参考

时间:2015-09-29 14:02:20

标签: java jvm

为什么需要soft / weak / phantom引用而不是使object为null。 我不清楚为什么我们需要使用这些引用。

据我所知,内部对象可能为null但外部对象是可达的,那么内部对象不会被垃圾收集,以收集我们需要使用soft / weak / phantom引用的内部对象。这是正确的还是我们有其他理由使用它?

我在其中一个堆栈中读过现代JVM正在处理这个内部对象是null然后垃圾收集,我无法找到更多的细节。

提前致谢。

1 个答案:

答案 0 :(得分:0)

WeakHashMap等数据结构在键上使用WeakReference

基本上,我们的想法是,如果您的代码中存在对某个键的引用,那么与该键相对应的值将隐藏在Map中。

如果您的代码中没有更多关于该键的引用,则关联的值可以是垃圾收集器的候选者。

来自java doc

  

基于哈希表的Map接口实现,带有弱键。   当其密钥不再正常使用时,WeakHashMap中的条目将自动被删除。更准确地说,给定密钥的映射的存在不会阻止密钥被垃圾收集器丢弃,即,可以最终化,最终化,然后回收。当一个键被丢弃时,它的条目将被有效地从地图中删除,因此该类的行为与其他Map实现的行为略有不同。

在没有WeakReference

的情况下无法获得此行为