【发布时间】:2010-10-16 00:05:13
【问题描述】:
我正在寻找一个简单的内存(和进程内)缓存,用于查询数据的短期缓存(但短期含义超出请求/响应,即会话边界)。 EhCache 可能会起作用,但它看起来好像不能提供我需要的一件事:不是对缓存对象数量的限制,而是对缓存数据消耗的内存量的(近似)限制。
我知道在没有序列化的情况下很难确定给定对象的确切内存使用情况(在一般情况下我想避免这种情况,因为它的速度很慢违背了我的使用目的),我可以不必提供大小估计自己。
那么:是否有一个简单的开源 java 缓存允许定义缓存对象的“权重”,以限制缓存的内容数量?
编辑(2010 年 11 月):值得一提的是,有一个名为 Java CacheMate 的新项目试图解决这个问题,以及其他一些改进想法(多级内存进程内缓存)
【问题讨论】:
-
嗯。我的问题一定写得很糟糕,因为大多数答案都集中在对我来说没有问题的部分。我可以提供有用的估计——我只需要缓存来使用它。也就是说,不仅仅是物体的数量,还有总重量。我想没有一个“标准”的这样做。
-
我认为您需要的更多细节会有所帮助。您想要考虑的唯一因素是物品的(静态)重量吗?大概你想要一个缓存可以支持的总“重量”......时间呢?这应该发挥作用吗?
-
请问为什么需要基于大小的缓存?
-
是的:只是静态重量。我知道有许多有用且有趣的因素:我可以在这里忽略它们。新鲜度可能很重要,但 LRU 在这里也很好。并且基于大小是为了限制堆缓存的使用量。感谢所有的答案,cmets,希望这会有所帮助!
-
至于为什么基于大小:确保缓存和内容的内存使用是有界的(在适当近似的范围内)——我可能想为一个缓存分配大约 100 兆,为另一个缓存分配 200 ,总的最大堆为 1 gig。
标签: java caching memory-management ehcache