2013-07-09 152 views
5

我知道下面的知識:短弱參考和長弱參考之間有什麼區別?

弱引用允許垃圾收集器收集的對象 同時仍然允許訪問對象的應用程序。

因此,如果對象已被回收,必須在必要時重新創建。

那麼,短弱參考和長弱參考之間有什麼區別?我認爲它如下:(根據msdn)

簡短的弱引用:如果GC回收的對象,對象是真的 發佈。

long weak reference:如果GC回收對象,則對象仍然存在(因爲它被緩存) 。

那麼有人能告訴我更多的細節嗎?

+1

人們都在這裏解釋:http://stackoverflow.com/questions/310685/weak-references –

回答

5

短弱引用的目標當對象是 通過垃圾收集回收變爲零。弱引用本身就是一個被管對象,並且像其他被管對象一樣被垃圾收集。一個簡短的弱引用是WeakReference的默認 構造函數。

對象的Finalize方法 調用後長弱引用被保留。這允許對象被重新創建,但對象的狀態 仍然不可預知。要使用長引用,請在WeakReference構造函數中指定 true。

如果對象的類型沒有一個finalize方法,短期弱 參考的功能應用和弱引用纔有效 直到目標被收集,在運行 終結後,隨時可能發生。

要建立強引用並再次使用該對象,請將WeakReference的 目標屬性強制轉換爲對象的類型。如果 Target屬性返回null,則收集該對象;否則, 您可以繼續使用該對象,因爲應用程序有 重新獲得對它的強烈參考。

使用原則爲弱引用

使用長弱引用只在必要時作爲 對象的狀態是定稿後不可預知的。避免使用較弱的 對小對象的引用,因爲指針本身可能與 一樣大或更大。

避免使用弱引用作爲自動解決內存管理問題的 。相反,制定一個有效的緩存政策 處理您的應用程序的對象。

Reference

+0

我已經知道這篇文章,但我的問題是,如果GC回收的對象,該對象仍然存在? –

+1

我想知道爲什麼這份文件如此糟糕地描述了實際發生的事情?當其目標有資格立即完成或不再存在時,或者當弱引用*本身*有資格完成時,簡短的弱引用將失效。當目標不再存在時,或者當弱引用本身有資格完成時,長引用將會失效。請注意,弱引用可能會失效,即使它們的目標是活的 - 文檔中未提及的一點! – supercat

相關問題