2011-02-08 46 views
5

問題說明了一切。我有一個數據結構,因爲一個弱散列表,我無法統帥......想知道我是否可以擺脫它:)弱陣如何使用?

回答

10

弱數組是一個弱指針數組。弱指針是可能被垃圾收集的值的參考。

如果您在某個值上使用常規指針,則會阻止其垃圾收集,直到裁判本身收集垃圾。如果參考文獻很薄弱,可以在裁判面前收集。

使用示例是將數據提供給多個接收器的源。如果源持有指向接收器的常規指針,則每當不再需要接收器時,它就不會被垃圾收集,直到源(例如可能永遠不會發生)爲止。如果信息源對信宿使用較弱的參考,則可能在信源之前收集垃圾信息。

另一個例子是使用弱哈希表(它涉及弱數組)的類型的哈希調整。快速地,hashconsing是一種記住創建和生活在程序中的給定類型的所有值的方法。與適當的值構造函數一起,這可以確保最大限度地共享該類型的值,並允許在該類型上實現結構上的相等性作爲物理相等性。在這種情況下,如果使用非弱散列表,程序不再使用的值永遠不會被垃圾收集。最後,許多人認爲(錯誤地)弱引用對實現緩存很有用。如果是垃圾收集,請保留一個值較弱的ref,重新加載/重新計算該值。這不是一個好的緩存算法,因爲主要的垃圾回收回收了任何不再被引用的值。因此,您的緩存算法沒有可預測性或有用的屬性,例如,緩存/可用內存的大小不會超過給定比例。

+0

非常好的答案,謝謝! – Yttrill 2011-02-10 14:24:39

1

在您的數據結構及其與Marshall模塊兼容的結構一致表示之間使用雙映射函數對。

+0

詹姆斯,我不能給你打勾,儘管我想。見下.. – Yttrill 2011-02-10 14:27:10