请不要说EHCache或OSCache等.为了这个问题的目的,假设我只想使用SDK(从实践中学习)来实现我自己的.鉴于缓存将在多线程环境中使用,您将使用哪些数据结构?我已经使用LinkedHashMap和Collections#synchronizedMap实现了一个,但我很好奇任何新的并发集合是否会更好.
更新:当我发现这个金块时,我只是阅读Yegge的最新消息:
如果您需要持续时间访问并希望维护插入顺序,那么您不能比LinkedHashMap做得更好,这是一个真正精彩的数据结构.它可能更精彩的唯一方法是如果有并发版本.可惜.
在我使用上面提到的LinkedHashMap
+ Collections#synchronizedMap
实现之前,我的想法几乎完全相同.很高兴知道我不只是忽略了一些东西.
基于到目前为止的答案,对于高度并发的LRU来说,我最好的选择是使用一些相同的逻辑来扩展ConcurrentHashMapLinkedHashMap
.
Java的WeakHashMap经常被认为对缓存很有用.虽然它的弱引用是根据地图的键而不是它的值来定义的,但这似乎很奇怪.我的意思是,这是我想要缓存的值,除了缓存之外没有其他人强烈引用它们,我想要收集垃圾,不是吗?
以哪种方式有助于保持对密钥的弱引用?如果你这样做ExpensiveObject o = weakHashMap.get("some_key")
,那么我希望缓存保持为'o',直到调用者不再持有强引用,并且我根本不关心字符串对象"some_key".
我错过了什么吗?