只是想澄清我对这个代码的理解
Reference<Keyword> existingRef = table.get(sym);
if(existingRef == null) // keyword was not found
{
Util.clearCache(rq, table); // force cleaning of the dead weak references in the whole cache
....create new keyword and store it wrapped into WeakReference in the cache
}
也许我错过了什么,但是为什么当rq不为空(即存在序列扫描整个缓存的过期引用并移除它们)时,要强迫从死弱引用中清理缓存?
序列扫描在调用Keyword函数时执行,即阻止调用者。
直观的替代方案是分配一个线程,定期(约10秒或类似时间)回收缓存中的垃圾。