2012-10-22 58 views
1

當對象真的被從內存中刪除時,使用弱或軟參考與ReferenceQueue?我必須撥打referancequeue.removereferancequeue.poll()方法嗎?當對象真的從內存中刪除時,在使用ReferenceQueue時使用弱引用還是軟引用?

例子:

ReferenceQueue q = new ReferenceQueue(); 
WeakReference wr = new WeakReference(object, referenceQueue); 


if (pr.isenqueued()) { 

    // do something 

} 

或者我有以下?

WeakReference weakref=null; 

if ((weakref=q.removed())!=null) { 

    // do something 

} 

回答

0

後您從ReferenceQueue上刪除,對象可以完成,他們已經定稿後,他們可以在接下來的GC被刪除。

+0

你的意思是我必須運行「q.remove()」才能讓java VM自動從內存中移除對象。 – user1764890

+0

當您調用q.remove()時,該對象可以完成並且在完成後可以清理。即可能不會清理一兩個GC。 –

1

在您的示例中,WeakReference將在垃圾收集器不可更新時被清理。另一方面,如果使用SoftReference,只要有足夠的內存,就可以保持軟可訪問的對象。所以如果你想讓它持續下去,你應該使用SoftReference。我想控制,即第二種方式會讓你放心。如果您想自己進行清理操作而不是GC,爲了確保進度,您可以改用PhantomReference。垃圾收集器入隊前不會自動清除垃圾收集器。

相關問題