我有一个相当大的对象(一个复杂的类,可以使之可序列化)的集合以及对其进行操作的算法。该算法必须对每个对象执行多次,并且一次只需要集合中的几个对象。
为了节省RAM,如果存储空间不足,我想将算法暂时不使用的对象缓存到磁盘上。该算法需要知道哪些对象在磁盘上,以便可以尽可能地避免它们。
我该如何实现?我必须自己实现还是已有库?
编辑:
自从我尽快丢弃这些对象以来,大概不会有几百个这些对象。每个对象(简化描述)都包含一个二维数组,最多包含256x256个元素。考虑主阵列的平均负载约为30%,子阵列在大多数情况下几乎已满。数组中的每个对象都包含一些较小的数据:一些带有向量的数组列表,一个属性HashMap等。我通过实例化将大多数数据外包,因此它很小。
最佳答案
感谢GitHub上一个好人提到了MapDB,它非常适合用例。它具有基于内存/计数和时间的逐出项目。文档甚至has an example(“过期溢出”部分):
DB dbDisk = DBMaker
.fileDB(file)
.make();
DB dbMemory = DBMaker
.memoryDB()
.make();
// Big map populated with data expired from cache
HTreeMap onDisk = dbDisk
.hashMap("onDisk")
.create();
// fast in-memory collection with limited size
HTreeMap inMemory = dbMemory
.hashMap("inMemory")
.expireAfterGet(1, TimeUnit.SECONDS)
//this registers overflow to `onDisk`
.expireOverflow(onDisk)
//good idea is to enable background expiration
.expireExecutor(Executors.newScheduledThreadPool(2))
.create();
关于java - Java将对象缓存到磁盘,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40705185/