在将其保存到文件之前拆分大对象

时间:2017-10-22 12:01:21

标签: java garbage-collection fileoutputstream objectoutputstream

我的java应用程序堆中有一个占用大约15GB的对象,我需要在JVM重启之间保持持久性。我使用ObjectOutputStream的writeObject方法每隔一段时间将它写入磁盘上的文件。由于写入过程非常长(几分钟)并导致一些GC问题,我想以某种方式拆分对象以将每个部分分别保存到不同的文件而不是单个动作到单个文件。 有没有办法做到这一点(当然,我需要时从文件中检索回来)?

        FileOutputStream fos = null;
        GZIPOutputStream gos = null;
        ObjectOutputStream oos = null;
        try {
            fos = new FileOutputStream("some_path");
            gos = new GZIPOutputStream(fos);
            oos = new ObjectOutputStream(gos);
            oos.writeObject(myLargeObject);
            oos.flush();
            gos.close();
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

1 个答案:

答案 0 :(得分:0)

您可能需要查看this答案。重新组合拆分文件的相反过程只不过是从每个单独的文件读取并附加到“主”文件。