例1:
Integer prime = 1;
WeakReference<Integer> soft = new WeakReference<Integer>(prime);
prime = null;
在下一个gc循环中,将收集素数。到现在为止还挺好。但如果我没有WeakReference这样做:
Integer prime = 1;
prime = null;
不是一回事吗? Prime将再次收集,因为没有参考。
答案 0 :(得分:2)
你的榜样并不是特别好。它肯定不是有效的use-case for a WeakReference
。对于初学者来说,Integer
1将永远存在于the Integer
cache中,因此总是会有强烈的引用。
只要其他东西持有(强)引用对象,WeakReference
就会保留对对象的引用。想象一下特别fickle person。他们会喜欢电视节目/歌曲/电影...但只有在其他人喜欢的时候。一旦其他人不再喜欢那件事,他们也会立即失去兴趣。
另外,请注意:
WeakReference<Integer> soft
WeakReference
和SoftReference
为closely related but are not interchangeable。