【问题标题】:Save and load a (Java) program's state保存和加载(Java)程序的状态
【发布时间】:2010-10-12 11:16:12
【问题描述】:

假设您时间紧迫,并且正在寻找具有某些功能的程序,并且您找到了一个,但它缺少一项功能 - 它无法保存和加载其状态。是否有可能在操作系统级别或使用另一个程序来实现这一点,该程序可以将整个内容写入文件,然后在稍后将其加载回内存中?怎么样?

特别是对我而言,这是关于 Java 程序的,但欢迎提供有关此主题的更多信息。

【问题讨论】:

    标签: java load save memory-dump


    【解决方案1】:

    一个(繁重而简单的)解决方案可能是使用 VirtualPC 并将程序安装在虚拟操作系统上。

    【讨论】:

    • 非常聪明!对于这种情况,您会选择什么操作系统?
    • 当然这取决于您的需求。最重要的部分是:您需要完整的操作系统安装。 Win7prof 包含 WinXP 模式。但我在 VirtualPC 中也有 Windows Vista 和 Windows Vista。您至少需要 2GB 内存。安装完所有内容后,您可以很容易地决定保留/保存更改或删除所有内容
    【解决方案2】:

    【讨论】:

    • JavaVM 是一个虚拟机。与完全成熟的基于动态汇编编译器的虚拟机相比,保存脚本虚拟机所需的资源要少得多。
    【解决方案3】:

    你想做一些类似于 Windows 的 Hibernate 功能的事情吗?

    这在 Java 中实现起来非常困难,因为您还必须编写 JavaVM 的状态。如果您在关闭程序结束时打开了文件,依此类推。

    我认为您能做的最好的事情就是使用 Java 序列化将需要恢复的对象写入磁盘。

    【讨论】:

    • 休眠 - 我想。在这种情况下,程序非常简单,没有任何打开的文件。只是它自己的状态。为什么保存 JavaVM 的状态会成为问题?假设您只运行这个 Java 程序。
    • 好吧,Java VM 由您的操作系统加载,然后是 Java VM 加载您的程序。因此,您正在寻找一个加载 JavaVM 的程序,我们称之为 MyJavaLoader,它会加载加载您的程序的 JavaVM。你看到无尽的链条来了吗:-)。
    【解决方案4】:

    看看https://criu.org/Main_Page的CRIU项目

    它在 linux 系统中提供了这种可能性。 Docker 集成了它并提供了一个 docker checkpoint 命令,如果您在容器中运行程序,它将允许您在任何操作系统上执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 2013-11-02
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多