對soft reference,比較容易理解它的用處。它天生就是為實現(xiàn)cache來設計的。關(guān)于weak reference,好像很少有人說的清楚。有的和soft reference混在一起談,有的就是簡單翻譯java doc中的說明,看得出翻譯的人自己也不是很理解,所以只能一筆帶過。
我也一直不是很清楚它的實際用途,今天我突然想到WeakReference可能的設計目的。
從java的內(nèi)存泄漏說起,以前說到java也會內(nèi)存泄漏的時候往往會舉這樣的例子,對象保存在一個全局表中,造成無法回收。一般的解決方法是不要使用全局表或者記得更新。但在實際開發(fā)中,有時必須要使用全局表,但無法明確知道該對象是否可銷毀,因為對象可能被多個線程共享訪問,所以程序不能確切的更新表中的引用。這時候weak reference就有用武之地,用WeakHashMap構(gòu)造全局表,key和value之間是weak reference,這樣的話程序員就不用考慮更新該表了,只要該對象沒有強引用指向它,gc就可以回收它了。
回頭去找一個實際的例子對照看看,記得在JDK中,weak reference還是用的很頻繁的。