只是想澄清我对这段代码的理解
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秒)进行清理