有没有办法将内存写入文件

时间:2015-08-25 17:31:15

标签: java hpc

我正在尝试开发一些可能在HPC环境中运行多周的代码。问题是机会相当小,以至于我能够垄断集群来运行整个程序,因此我正在考虑将进度存储到某个文件系统中的方法。

正如我想的那样,我想知道是否有办法从我的应用程序使用的内存中获取一些快照并将其存储在某个文件中。我有这种感觉这应该是最简单的方法来停止处理并随时重新启动,因为你可以将该文件加载到内存中并继续工作,好像什么也没发生。

我开始在互联网上搜索试图找到关于此的内容,但是因为我真的不知道这个词(我想有一个术语),而且我没有&# 39;除了数十亿种方法之外,还要尽可能高效地将对象写入文件。我不相信,那些作家和溪流的表现如上所述...(如果我犯了错误,请纠正我!)

我的问题因此可以表述如下:
有没有办法在java中做这样的事情? 如果没有,是否存在任何接近我试图描述的想法或表现的东西?

更新2

随着更新1变得无关紧要,我想更新我正在尝试做的示例,因为我现在正在使用应该存储的状态对象:

abstract class State {

    private final int order;

    private SortedMap<Key, Long> map1 = null;
    private SortedMap<Code, Long> map2 = null;
    private SortedMap<Key, Long> derivedFromMap1 = null;
    private BigInteger sum = null;

    State(int order) {
        this.order = order;
    }

    abstract fillMap1(Algorithm algo);
    abstract fillMap2(Algorithm algo);
    abstract fillMap3(Algorithm algo);
    abstract sum(Algorithm algo);

}

我现在想要发生的是State - 对象被持续存在而不会浪费掉IO上浪费的太多CPU时间(我希望我假设操作系统可以正确开始将内存中的一部分写入文件系统,而不需要为每一行打扰CPU。)

这些State - 对象也有可能变得相当大,甚至可能太大而无法完全驻留在内存中(我实际上不知道,但我可能想要考虑它)。因此,不必拥有大量虚拟内存,只需将其全部写入正确的文件即可...

1 个答案:

答案 0 :(得分:4)

  

有没有办法在java中做这样的事情?

是的,您序列化了您需要保留的所有数据,并在启动时反序列化该数据并继续您所处的位置。您可能希望定期检查您的应用程序,以防它死亡/崩溃,以便您可以从最近的一点继续。

  

如果没有,是否存在任何接近我试图描述的想法或表现的东西?

是的,您需要提供一些详细信息才能获得更具体的答案。