代码之家  ›  专栏  ›  技术社区  ›  dkarp

假脱机到磁盘的Java集合

  •  10
  • dkarp  · 技术社区  · 16 年前

    由于在事务过程中建立了一些非常大的列表和集合,并且在事务结束时只重复了一次,所以Java内存不足。有没有提供Java集合的库,当集合大小超过给定阈值时,这些库可以将其可序列化内容假脱机到磁盘?

    2 回复  |  直到 16 年前
        1
  •  4
  •   objects    16 年前

    你可以试试 ehcache 以及它的overflowToDisk选项

        2
  •  4
  •   dimitarvp    16 年前

    我不会给你发示例代码,因为它会变得太长,但这是我以前的做法:

    1. 扩展 LinkedBlockingQueue
    2. 覆盖its offer , put , poll , take remove 方法。 :如果超类' 提供 返回false(已达到容量), 我将开始序列化到磁盘。
    3. 同样,在 然后 您可以开始从磁盘读取(并删除读取的第一条记录,因为它现在将驻留在内存中;当然,您也可以成批读取记录)。
    4. 为这样一个队列的每个实例分配一个文件系统安全标识符,以便我可以使用它为它创建文件系统安全的文件名。另外,为了更进一步,我可能会使用当前用户的主目录作为将这些队列序列化到磁盘上的位置。

    这样,99%的磁盘序列化队列就准备好了,而且只需将额外的功能放在正确的位置。您需要彻底阅读Java的文档 BlockingQueue

    希望这有帮助。