有没有办法将内存中的一部分写入文件
Is there a way to write a part from memory to a file
我正在尝试开发一些可能 运行 在 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
-对象时不时地持久化而不会损失太多 CPU-在 IO 上浪费的时间(我希望我是正确的假设 OS 可以开始将一部分从内存写入文件系统,而无需为每一行打扰 CPU。
这些 State
-objects 也有可能变得相当大,甚至可能太大而无法完全驻留在内存中(我实际上不知道,但我可能想考虑一下)。因此,与其拥有大量虚拟内存,不如将其全部立即写入正确的文件可能会很有用...
Is there any way to do something like this in java?
是的,您序列化了所有需要保留的数据,并在启动时反序列化了该数据并继续您之前的操作。您可能希望定期检查您的应用程序点,以防万一 dies/crashes 以便您可以从最近的点继续。
If not, does there exist anything that approaches the idea or performance of what I tried to describe?
是的,您需要提供一些详细信息才能得到更具体的答案。
我正在尝试开发一些可能 运行 在 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
-对象时不时地持久化而不会损失太多 CPU-在 IO 上浪费的时间(我希望我是正确的假设 OS 可以开始将一部分从内存写入文件系统,而无需为每一行打扰 CPU。
这些 State
-objects 也有可能变得相当大,甚至可能太大而无法完全驻留在内存中(我实际上不知道,但我可能想考虑一下)。因此,与其拥有大量虚拟内存,不如将其全部立即写入正确的文件可能会很有用...
Is there any way to do something like this in java?
是的,您序列化了所有需要保留的数据,并在启动时反序列化了该数据并继续您之前的操作。您可能希望定期检查您的应用程序点,以防万一 dies/crashes 以便您可以从最近的点继续。
If not, does there exist anything that approaches the idea or performance of what I tried to describe?
是的,您需要提供一些详细信息才能得到更具体的答案。