【发布时间】:2016-11-20 14:26:15
【问题描述】:
我有一组相当大的对象(一个复杂的类,可以被序列化)和一个对其进行操作的算法。该算法必须对每个对象多次工作,并且一次只需要集合中的几个对象。
为了节省 RAM,如果内存不足,我想将算法暂时未使用的对象缓存到磁盘。该算法需要知道哪些对象在磁盘上,以便尽可能长时间地避开它们。
我如何实现这一目标?我必须自己实现还是有现有的库?
编辑:
我可能不会拥有超过几百个这样的对象,因为我会尽快丢弃它们。每个对象(简化描述)包含一个二维数组,最多包含 256x256 个元素。考虑主阵列的平均负载约为 30%,而子阵列大部分时间几乎已满。数组中的每个对象都包含一些较小的数据:一些带有向量的数组列表、一个属性 HashMap 等等。我通过实例化外包了大部分数据,因此它相当小。
【问题讨论】:
-
在进入这个之前,我们在谈论多少个对象?他们的班级是什么样的?
-
Apache commons 有一个缓存库:commons.apache.org/dormant/cache
-
大多数缓存 API,包括 ehcache,都支持“最近最少使用”的缓存弹出策略。这将支持您要完成的工作。
-
你为什么相信它会节省内存?您的期望与操作系统的工作方式接近。它将内存页面存储在磁盘上并使用 RAM 进行性能优化。
标签: java caching serialization