在Java中为GC和WeakReference设置空对象

时间:2018-05-23 10:30:45

标签: java garbage-collection

我对WeakReference实际做了什么感到有些困惑。根据我的阅读,让我解释一下:

例1:

Integer prime = 1;  
WeakReference<Integer> soft = new WeakReference<Integer>(prime); 
prime = null;

在下一个gc循环中,将收集素数。到现在为止还挺好。但如果我没有WeakReference这样做:

Integer prime = 1;  
prime = null;

不是一回事吗? Prime将再次收集,因为没有参考。

1 个答案:

答案 0 :(得分:2)

你的榜样并不是特别好。它肯定不是有效的use-case for a WeakReference。对于初学者来说,Integer 1将永远存在于the Integer cache中,因此总是会有强烈的引用。

只要其他东西持有(强)引用对象,WeakReference就会保留对对象的引用。想象一下特别fickle person。他们会喜欢电视节目/歌曲/电影...但只有在其他人喜欢的时候。一旦其他人不再喜欢那件事,他们也会立即失去兴趣。

另外,请注意:

WeakReference<Integer> soft

WeakReferenceSoftReferenceclosely related but are not interchangeable