一段时间后取消引用自身的Java对象

时间:2015-01-31 01:01:05

标签: java memory dictionary timer

我有一个用于存储POJO的大型HashMap。 随着时间的推移,我添加越来越多的POJO,地图变得越来越大,最终我的内存耗尽。 我希望地图中的对象在一段时间后取消引用它们(因此它们被有效地缓存)。 我在考虑在对象中使用计时器,但我不确定这是否是标准(或正确)的方式。 任何建议都将非常感谢,提前谢谢!

1 个答案:

答案 0 :(得分:0)

我至少会在地图对象大小上实现绝对阈值(如果您知道POJO大小,则以对象数量为单位)。在添加时,检查是否将超出您的大小限制,如果是,则迭代以查找最旧的MaxCount * N(N是分数,可能以20%= 0.2开头)项并删除它们。因为您修剪了限制的百分比(非常重要,相对于固定大小),添加项目仍然是O(1)(摊销)。如果另外,你想为你的集合添加一个计时器,它会丢弃任何超过某个阈值的东西,这也可以帮助你在一个单独的线程中保持大小可管理而不需要在一些罕见的情况下调用Add。例。