【发布时间】:2012-08-03 12:29:27
【问题描述】:
我正在尝试在 Java 中实现 LRU cache,它应该能够:
动态更改大小。从某种意义上说,我计划将其作为SoftReference 订阅ReferenceQueue。所以根据内存消耗,缓存大小会有所不同。
我计划使用ConcurrentHashMap,其中的值将是一个软引用,然后定期清除队列以更新地图。
但是上面的问题是,我怎么做LRU?
我知道我们无法控制 GC,但是我们能否管理对值的引用(在缓存中),使得缓存中所有可能的对象都可以根据使用情况(即上次访问它的时间),而不是以某种随机方式。
【问题讨论】:
-
Guava 的 CacheBuilder 在这里应该可以很好地工作,它混合了源自 ConcurrentLinkedHashMap 的 LRU 特征。
标签: java caching hashtable lru