从软/弱引用中恢复硬引脚

时间:2015-12-01 07:21:57

标签: reference garbage-collection jvm weak-references recover

在我的程序中,当对象仅在弱引用上可用时,可能会出现这种情况。我注意到一些NullPointerExceptions,它们不容易调试。我想知道,当用户线程执行其方法或通过硬引用到达时,一旦对象被标记为弱可达性,就有可能再次变硬。互联网上的各种论坛都表示我们可以恢复硬性参考,考虑到软/弱,但我想知道为什么SPEC is so specific then

  

可达性

     

从最强到最弱,可达性的不同程度   反映物体的生命周期。它们在操作上被定义为   如下所示:如果......对象轻柔,则可以强烈访问对象   如果......物体可以到达......

我不应该将lifecycle读作单向瀑布模型吗?如果一个对象在弱一段时间内被恢复,它可以多次出现在WeakRefQueue中吗?我在ID请求对象时使用弱引用来恢复硬引用,但也将它们放入引用队列以确定客户端是否仍在使用该对象,如果没有则进行一些清理。这一切都在一个线程中完成,但我问自己这是否会造成任何问题。

1 个答案:

答案 0 :(得分:1)

如果可以通过强引用访问对象,则强烈引用该对象。没有什么比这更神奇了。这意味着对象可以具有多个强引用,多个软引用和多个弱引用,或任何组合。

唯一的区别是通过WeakReference的引用不算作强引用。如果引用仍然可用,您可以从这样的弱引用中获得强引用。

WeakReference<MyType> ref = ...
MyType stringRef = ref.get();

所有这一切都是复制参考,没有其他需要发生。