gpt4 book ai didi

Java缓存对象到磁盘

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:05:39 24 4
gpt4 key购买 nike

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

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

我如何实现这一目标?我必须自己实现还是有现成的库?

编辑:

我可能不会拥有超过几百个这样的对象,因为我会尽快丢弃它们。每个对象(简化描述)包含一个包含最多 256x256 个元素的二维数组。考虑主数组的平均负载约为 30%,而子数组大部分时间几乎已满。数组中的每个对象都包含一些较小的数据:一些包含 vector 的数组列表,一个属性 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缓存对象到磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40705185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com