我以前得出的結論是,如果您需要一個基於值(等於)的相等的SoftReference,那麼一個人的設計不好,除了這個人以外。這是繼谷歌收藏和番石榴不包括這樣一個類。但是我遇到了一個我認爲可以使用這樣一個對象的問題。SoftReference具有值(等於)等於的潛在用途
我們在一個視覺效果渲染農場中有一個資產管理系統,它有100個運行相同作業的進程,這些進程只在渲染的幀號上有所不同。我們有一個Oracle數據庫,需要記錄所有使用的資產。在中間層資產管理系統中,我們可以使用HashSet來記錄是否將插入到Oracle中的對象,而不是用相同的插入方式敲擊Oracle,而只有一個插入方式可以從所有作業中成功完成。
我可以使用Google MapMaker過期,但我不想擔心獲得正確的到期日期,我們已經呈現在幾小時內和幾天內運行。使用SoftReference以及equals equals聽起來像是一種更好的方式,所以JVM會自動管理垃圾收集。
對於我想用帶垃圾回收功能的ConcurrentHashMap解決的其他問題,我將在HashMap中使用強引用作爲獲取equals()相等和SoftReference作爲值的關鍵,以便JVM可以垃圾回收,但在這種情況下,值並不重要,我沒有一個值包含在SoftReference中放在那裏。所以看起來像使用equals()的SoftReference可以做到這一點。
對此有何建議?
愛你的問題,我最近也一直在想這個 – nanda 2010-02-12 07:58:56
不是'ResourceBundle'做這樣的事情嗎? – 2010-02-12 08:22:27
@nanda Oracle中添加的內容是動態生成的資產列表(稱爲NFS服務器上的文件名); ResourceBundle似乎並不適合。我只需要一個HashSet來記錄文件名被記錄在Oracle中,所以另外99次嘗試插入它不會浪費Oracle中的CPU週期。 – 2010-02-12 15:53:50