【发布时间】:2016-02-21 07:45:36
【问题描述】:
我有一张 HashMap 地图,其中 Node 是一个包含一些信息的类,最重要的是包含一个邻居 HashMap。
我的算法从外部 HashMap 随机获取并放入内部 HashMap,例如
Node node = map.get(someInt);
node.getNeighbors().put(someInt, someOtherInt);
我在外部地图和内部地图中都有很多条目。完整的数据集不能单独由内存处理,所以我需要使用一些磁盘缓存。我想尽可能多地使用内存(直到几乎满,或者直到达到我指定的阈值),然后将条目逐出到磁盘。
我使用了几个缓存(主要是 mapDb 和 EhCache)试图解决我的问题,但没有运气。我正在设置最大内存大小,但缓存只是忽略它。 我几乎可以肯定,问题在于我的对象是动态大小的。
有人对我如何处理这个问题有任何想法吗? 提前致谢。
【问题讨论】:
-
能否告诉我为什么 EhCache 不能帮助你?它是否将数据从内存中逐出到磁盘缓存中?
-
EhCache 驱逐似乎忽略了大小限制。我正在运行 -Xmx1g 并将内存缓存大小设置为 300mb,但一段时间后内存被填满并且 GC 活动过多,从而削弱了我的应用程序。
标签: java caching hashmap ehcache mapdb