假脱机到磁盘的Java集合
由于在事务过程中构建了一些非常大的Lists和Sets,并且在事务结束时只迭代了一次,因此我在Java中耗尽了内存。 是否有任何提供Java集合的库可以在集合大小超过给定阈值时将其可序列化内容假脱机到磁盘?
您可以尝试类似ehcache及其overflowToDisk选项
我不会发布你的示例代码,因为它会变得太长,但这是我以前做过的方式:
- 扩展
LinkedBlockingQueue
。 - 覆盖其
offer
,put
,poll
,remove
和remove
方法。 示例 :如果超类’offer
返回false(达到容量), 那么我将开始序列化到磁盘。 - 同样,在执行中,你检查内存中是否有任何现有元素,如果没有, 那么你开始从磁盘读取(并删除第一个读取记录,因为它现在将驻留在内存中;或者你可以读取记录当然是分批)。
- 为此类队列的每个实例分配一个文件系统安全标识符,以便我可以使用它为它创建文件系统安全文件名。 另外,为了更进一步,我可能会使用当前用户的主目录作为这些队列被序列化到磁盘上的位置。
这样,99%的磁盘序列化队列已准备就绪,您只需将额外的function放在正确的位置。 您需要彻底阅读Java的BlockingQueue
接口的文档,但是,它值得您花时间,因为您只需要添加所需的一些额外function,而不是从头开始编写所有内容。
希望这可以帮助。