2013-10-20 38 views
0

請解釋WeakReferences用於什麼。我通常理解Java的概念,但這個給我帶來麻煩。WeakReference,Weakhashmaps,softreferences用於什麼?

我明白在WeakReferences是什麼,但它們的用途和性質是在我的頭有點含糊。我無法想像使用WeakReferences成爲必需的正確場景。

我也知道,一個WeakHashMap中有關在WeakReferences其中包含null鍵一排,被自動刪除。我無法想象這怎麼可能,我有一個WeakHashMap的地方,和其他一些進程取消一個關鍵,然後WeakHashMap刪除該行保存一天。

而且this article,每個人都指,不提供一個案例研究,這將有助於我理解。

如果有任何人能拿出一個方案,給我一些理解成這樣,我會很感激。

+0

的「*當強引用過強*」那篇文章的部分描述了一對夫婦,其中弱引用是有用的方案... –

+1

要在這裏得到一個答案,請提出一個具體的,實際的,問題。你有什麼問題可以用這些類來解決? – bmargulies

回答

2

如果沒有其他人指向該對象,則不希望該對象「粘」到位時,基本上會使用弱引用。我認爲在考慮弱引用時,一個非常常見的用例是使用弱散列映射來維護規範映射。

考慮這樣一種情況,其中你需要保持一個Class<?>實例和其持有的所有方法的列表之間的映射。鑑於JVM完全有能力進行動態類加載和卸載,很可能您的地圖中作爲關鍵字的類不再需要(沒有其他指向它的地方)。現在,如果你會使用「強」引用來維護類到方法的映射,那麼只要你的地圖是可到達的,你的類就會一直存在,這在這種情況下不是一個好位置。你真正想要的是,一旦沒有實時引用你的「班級」,它應該放開地圖。這正是使用弱散列圖的原因。

編輯:我會推薦給this thread一個閱讀。

+0

謝謝桑傑。這清除了一點灰塵。 –