我有一张HashMap地图,其中Node是一个包含一些信息的类,最重要的是包含一个邻居HashMap。
我的算法从外部HashMap中随机获取并放入内部HashMap,例如
Node node = map.get(someInt);
node.getNeighbors().put(someInt, someOtherInt);
我在外部地图和内部地图中都有很多条目。完整的数据集不能仅由内存处理,因此我需要使用一些磁盘缓存。我想尽可能多地使用内存(直到几乎满,或者直到达到我指定的阈值),然后将条目逐出磁盘。
我已经使用了几个缓存(主要是mapDb和EhCache)试图解决我的问题,但没有运气。我正在设置最大内存大小,但缓存只是忽略它。 我几乎可以肯定,问题在于我的物体具有动态尺寸。
任何人都对如何处理这个问题有任何想法? 提前谢谢。
答案 0 :(得分:0)
注意:我在Ehcache上工作
与大多数其他缓存产品一样,Ehcache无法了解您的对象大小增长,除非您通过从外部更新映射来了解它:
Node node = cache.get(someInt);
node.getNeighbors().put(someInt, someOtherInt);
cache.put(someInt, node);
在这种情况下,Ehcache将正确跟踪对象的增长并触发记忆驱逐。
请注意,Ehcache不再在堆和磁盘之间使用溢出模型,而是始终将映射存储在磁盘上,同时在堆上保留hotset。