将Java程序转储到文件中并重新启动它

ic3*_*ic3 15 java

我只是想知道是否可以将正在运行的Java程序转储到文件中,然后重新启动它(同一台机器)

这听起来有点奇怪,但谁知道呢

---更新-------

是的,这是一个进程的休眠功能,而不是一个完整的系统.但谷歌'休眠jvm过程',你会明白我的痛苦.

linux上有一个关于这个主题的问题(这里).很快,就可以使用CryoPID来休眠一个进程(远非100%可靠).

几年前在stackoverflow中提出了类似的问题.

有了JVM,我有根据的猜测是,休眠应该更容易,并非总是可行,并且在100%时不可靠(例如UI和文件).


序列化应用程序的持久状态是一种选择,但它不是问题的答案.

Fra*_*kie 10

这可能有点矫枉过正,但你可以做的一件事是运行VirtualBox之类的东西并暂停/保存机器.

还有:
- 来自Apache的JavaFlow应该做到这一点,即使我没有亲自尝试过.
- 制动器可能正是您正在寻找的


Jör*_*yer 8

对您的问题的任何解决方案都有很多限制:所有外部连接可能会或可能不会在您尝试冻结和唤醒它们时存在.想想另一方面的超时,甚至停止通信伙伴 - 从Web服务器到数据库甚至本地文件的任何事情.

您要求一个通用的解决方案,没有您的程序的任何内部知识,您想要休眠.您可以随时执行的操作是序列化程序状态的一部分,即重启程序所需的部分.在长时间运行的计算(想想几天或几周)中实现重启点是或者至少是常识.因此,当您在程序运行一周后遇到程序中的错误时,您可以修复该错误并节省一些计算天数.

与使用的完整内存大小相比,程序的状态可能非常小.

您询问"是否可以将正在运行的Java程序转储到文件中,然后重新启动它". - 是的,但我不会建议一个通用的自动解决方案,必须将你的程序作为一个黑盒子来处理,但我建议你将程序状态和程序重启点的重要部分外部化.

希望有所帮助 - 即使它比你希望的更复杂.


Ósc*_*pez 7

我相信OP所问的是Smalltalk几十年来一直在做的事情 - 将整个编程/执行环境存储在一个图像文件中,然后继续工作.

AFAIK没有办法在Java中做同样的事情.


Pet*_*son 7

已经有一些研究"持久化"JVM的执行状态,然后将其移动到另一个JVM并再次启动它.看过一次展示但不记得哪一个.不要认为它已经在JVM规范中标准化了......

找到了我正在考虑的演示/演示,它是在OOPSLA 2005,他们正在谈论尖叫

祝好运!

其他感兴趣的链接: Merpati

小任务

M-JavaMPI