2014-02-12 58 views
1

我明白什麼是Java WeakReference。我想知道的是,通常將哪種具體問題用作解決方案。有沒有包含它們的模式?何時使用WeakReference?

+0

您可以使用它來保留與對象相關的一些屬性,而不會阻止刪除該對象。 –

+1

https://weblogs.java.net/blog/2006/05/04/understanding-weak-references(谷歌上的第一個鏈接) –

+0

不要忘了你有標籤本身的stackoverflow wiki:http:// stackoverflow。 com/tags/weak-references/info –

回答

3

WeakReferenceSoftReference用於當你想保留某些東西以防萬一需要時 - 但你可能不需要它,如果你確實需要它,你可以重新創建它。

例如,如果您有從網站獲取的信息緩存,則不需要不斷重新獲取它,但是如果您需要內存,則可以隨時丟棄一段時間沒有使用過的內容如果你確實需要它,可以重新獲得它。

SoftReferences對於這種緩存尤其有用,因爲它告訴GarbageCollector除非真的需要釋放內存,否則不要刪除對象。

WeakReference另一方面,GC可以儘快清理。

我在與工廠模式結合之前使用過它們。在工廠中創建對象時,請保留SoftReference。如果再次詢問它們,則返回已經創建的對象。如果他們不存在或已被垃圾收集,然後創建它們,返回它們,並在工廠內保留SoftReference

+0

你能提供一個具體的例子嗎? – Andres

+0

是的,已經輸入一個:) –

+0

單獨依靠弱/ SoftReference進行緩存[通常不是一個好主意,因爲它可能導致性能差](http://stackoverflow.com/a/11232117/829571) - 它是通常更好地使用明確的緩存策略。 – assylias