首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java缓存对象到磁盘

Java缓存对象到磁盘
EN

Stack Overflow用户
提问于 2016-11-20 14:26:15
回答 1查看 4.2K关注 0票数 4

我有一个相当大的对象集合(一个复杂的类,可以被序列化)和一个在其上运行的算法。该算法必须对每个对象进行多次处理,同时只需要对集合中的几个对象进行处理。

为了保存RAM,如果内存不足,我想将算法暂时没有使用的对象缓存到磁盘上。该算法需要知道磁盘上有哪些对象,这样才能尽可能地避免这些对象。

我怎样才能做到这一点?我是否必须自己实现这一点,还是有现有的库?

编辑:

我可能不会有超过几百个这样的对象,因为我会尽快丢弃它们。每个对象(简化描述)都包含一个包含最多256x256元素的2D数组。假设主数组的平均负载约为30%,而子数组在大多数情况下几乎已满。数组中的每个对象都包含一些较小的数据:一些包含向量的数组列表、一个属性HashMap等等。我把大部分数据都外包出去了,所以它很小。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-06 19:52:57

感谢GitHub上一个很好的家伙,他提到了MapDB,这非常适合用例。它具有内存/计数和基于时间的项驱逐。文档甚至是有一个例子 (“耗尽溢出”一节):

代码语言:javascript
复制
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();
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40705185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档