java - 有没有办法将内存中的一部分写入文件

标签 java hpc

我正在尝试开发一些可能会在 HPC 环境上运行数周的代码。问题是,我能够独占一个集群来运行我的整个程序的机会相当小,因此我正在考虑如何将我的进度存储到某个文件系统中。

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

我开始在互联网上搜索,试图找到与此相关的内容,但是由于我真的不知道这个术语(我想有一个术语),所以我没有得到除了数十亿种尽可能高效地将对象写入文件的方法之外。但我不相信那些作家和流会执行我上面描述的某些操作...(如果我犯了错误,请纠正我!)

我的问题因此可以表述如下:
有没有办法在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)。

这些状态对象也有可能变得相当大,甚至可能太大而无法完全驻留在内存中(我实际上不知道,但我可能想考虑到这一点) 。因此,与其拥有大量虚拟内存,不如将其全部写入正确的文件可能会很有用...

最佳答案

Is there any way to do something like this in java?

是的,您可以序列化需要保留的所有数据,并在启动时反序列化该数据并继续您之前所做的操作。您可能需要定期检查您的应用程序,以防它死机/崩溃,以便您可以从最近的点继续。

If not, does there exist anything that approaches the idea or performance of what I tried to describe?

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

关于java - 有没有办法将内存中的一部分写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32210459/

相关文章:

java - 为什么我的程序对 "Alt"+ "F4"没有反应?

java - Maven JavaFx 项目编译但从控制台运行给出 "Missing JavaFX application class"错误消息

java - 取消 Observable 的执行 (RxJava 1)

cloud - 添加主机后 PVM 终止

mpi - 无法通过 mpirun 使用所有核心

python - 是否可以将计算外包给 AWS 并在本地利用结果?

performance - 优化 GPU 利用率处理离散图像的技术

JavaFX 图像填充

java - 我的 Java 程序如何处理 JS 文件以提取函数名称?

linux - 选择共享内存系统、MPI 库、原始 RDMA 还是 ULP over RDMA?