只是想明确我对那段代码的理解。
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秒等)