Java将对象缓存到磁盘

pie*_*mes 3 java serialization caching

我有一个相当大的对象(一个复杂的类,可以使其序列化)的集合以及对其进行操作的算法。该算法必须对每个对象多次处理,并且一次只需要集合中的几个对象。

为了节省RAM,如果内存不足,我想将算法暂时不使用的对象缓存到磁盘上。该算法需要知道哪些对象在磁盘上,以便可以尽可能长地避免它们。

我该如何实现?我必须自己实现还是已有库?

编辑:

自从我尽快丢弃这些对象以来,大概不会有几百个这些对象。每个对象(简化描述)都包含一个二维数组,最多包含256x256个元素。考虑主阵列的平均负载约为30%,子阵列在大多数情况下几乎都已满。数组中的每个对象都包含一些较小的数据:一些带有向量的数组列表,一个属性HashMap等。我通过实例化将大部分数据外包,因此它很小。

pie*_*mes 5

感谢GitHub上的一个好人,他提到了MapDB,它非常适合用例。它具有基于内存/计数和时间的逐出项目。该文档甚至有一个示例(“过期溢出”部分):

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();
Run Code Online (Sandbox Code Playgroud)