2012-08-10 43 views
8

在Java中,有一個名爲WeakHashMap的數據結構,它將弱引用存儲爲鍵。每當弱引用被取出內存時,該條目將從地圖中刪除。Java:帶有弱引用的堆棧

如果我有一個數據結構,如堆棧或我在哪裏存儲弱引用一組,將他們的作品被自動當弱引用被取出的內存中刪除?

下面是一個存儲弱引用的堆棧的例子。

Stack<WeakReference<Object>> objStack = new Stack<WeakReference<Object>>(); 
+0

呃,是... ..。 – esej 2012-08-10 21:52:27

+0

你確定它不會返回空值嗎? – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 2012-08-10 21:52:54

+1

如果您正在考慮將弱引用用於實際應用程序,請**不要這樣做**!建立核心圖書館的人後悔加入他們,因爲他們沒有提供任何好處。如果您有興趣,請觀看此演示文稿(http://www.infoq.com/presentations/Extreme-Performance-Java)。 – Augusto 2012-08-10 21:53:49

回答

2

是的。你所描述的一般是弱引用的屬性,而不是WeakHashMap

the API

假設垃圾回收器確定在某一時間點,對象是弱可。那時它會原子上清除對該物體的所有弱引用...

+0

所以,如果你有一個WeakReferences的LinkedList,並且列表中間的WeakReference中的一個內存不足,你的LinkedList將按預期工作? – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 2012-08-10 21:58:21

+0

我不知道如何回答這個問題......這取決於你認爲的「如預期的」。 – Pops 2012-08-10 22:02:59

+0

我認爲我不明白的是當你在WeakReference上調用.get()時,它會得到實際的對象。 WeakReference從來沒有設置爲null,只是它指向的對象。 – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 2012-08-10 22:04:30