由于在事务过程中构建了一些非常大的列表和集合,并且在事务结束时迭代了一次,因此我在Java中的内存不足。是否有任何库提供Java集合,当集合大小超过给定阈值时,它们可以将可序列化的内容缓存到磁盘?后台到磁盘的Java集合
10
A
回答
4
你可以尝试像ehcache及其overflowToDisk选项
+0
据我所知,Ehcache没有从缓存中轮询(获取+删除)元素的逻辑,根据文档我只看到#get()方法。 也许你知道我该如何使用ehcache实现这样的功能? – MeetJoeBlack 2017-09-07 13:07:48
4
我不会发布你的示例代码,因为它会变得太长,但是这是我以前做过:
- 扩展
LinkedBlockingQueue
。 - 优先考虑它的
offer
,put
,poll
,take
和remove
方法。 示例:如果父类'offer
返回false(达到容量),然后我会开始序列化到磁盘。 - 同样,在
take
的实现中,您检查内存中是否存在任何当前元素,如果不存在,则开始从磁盘读取数据(并删除第一条记录,因为它现在驻留在内存中;或者当然也可以分批读取记录)。 - 将这样一个队列的每个实例分配一个文件系统安全标识符,以便我可以使用它为它创建文件系统安全的文件名。另外,为了更进一步,我可能会使用当前用户的主目录作为这些队列被串行化到磁盘上的位置。
通过这种方式,99%的磁盘序列化队列已准备就绪,您只需将您的额外功能放在恰当的位置即可。你需要仔细阅读Java的BlockingQueue
接口的文档,但是,值得你花时间,因为你只会添加你需要的额外少许功能,而不是从头开始编写整个东西。
希望这会有所帮助。
相关问题
- 1. IOS写入到磁盘上的后台线程
- 2. 移动TFS的项目集合到另一个磁盘
- 3. 核心数据:在后台写入批量记录到磁盘
- 4. Java溢出到磁盘的FIFO队列
- 5. 从磁盘在一个读离散集合页转到
- 6. 组合框移动资源到磁盘
- 7. Redis磁盘大小巧合?
- 8. 写入后中止缓冲到磁盘?
- 9. RMAN将磁带备份集恢复到磁盘
- 10. 写CFArray到磁盘
- 11. 后台线程锁UI中的重磁盘I/O
- 12. java mysql磁盘已满
- 13. Java ehcache磁盘存储
- 14. arangodb中按集合的奇怪磁盘空间利用率
- 15. 的iOS得到磁盘
- 16. Redshift中的磁盘空间和群集
- 17. Java控制台日志没有通过Applet写入磁盘
- 18. 保存与列表列的磁盘到磁盘
- 19. 将大型数据集PCA保存在磁盘上供以后与有限的磁盘空间一起使用
- 20. Java集合映射到集
- 21. 监控Java中的磁盘活动
- 22. 磁盘上的Java目录大小?
- 23. B +在Java中的磁盘实现
- 24. 拍摄屏幕的Java磁盘速度
- 25. Java集合到JSON
- 26. 将对象集合保存到磁盘Windows 10通用应用程序
- 27. 主磁盘与交换磁盘
- 28. 链接到本地磁盘
- 29. Python找到设备磁盘
- 30. 将trie保存到磁盘
不完全是你可能要搜索的东西,看看Hadoop http://hadoop.apache.org/ – saugata 2010-03-10 05:14:51
是否有一个原因,你没有使用标准的RDBMS呢?从某种角度来看,这是你所问的内容的定义。即使是轻量级的,如h2db,sqlite也可以胜任大多数任务。 – dpb 2010-03-10 05:51:19