java - 是否可以从堆转储中实例化 jvm?

标签 java jvm heap-dump

每个人都知道可以从正在运行的 JVM 中获取堆转储。另一种方法可能吗?我们可以使用堆转储启动 JVM 吗?

这个问题我想了很久。如果这是可能的,它将解决很多时间,并使支持工程师的思考变得容易。如果我们必须重新创建客户面临的一些罕见问题,它会很有帮助。 [想象一下,底层硬件和 Java 运行时是相同的,并且所有支持文件也存在于文件系统中的相应位置]。

补充说明:这样做的目的不是在 OOM 发生时,而是在 JVM 启动后的任何给定时间。

最佳答案

不,你不能。 您将需要每个打开文件中的当前位置等信息。这会影响简单顺序读取时返回的数据。恢复者需要打开每个文件并将其放到正确的位置。对于不可搜索的流,这可能是不可能的。

程序特定的序列化是一个更可行的路径,然后从那里设置程序。

此外,由于堆转储通常来自 OutOfMemory 情况,因此从相同的情况重新创建 JVM 将再次抛出 OutOfMemoryException。如果您在两者之间进行堆转储,则序列化您的对象并在您启动 jvm 时恢复它们。

(从这个问题的评论中复制的内容,作者 almas-shaikhpatricia-shanahan)

关于java - 是否可以从堆转储中实例化 jvm?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27267414/

相关文章:

java - ImageIcon 的 2D 数组在 JPanel 中显示不一致且仅部分显示

Android ==> 内存分析 ==> Eclipse 内存分析器?

java - 哪个线程触发了 OutOfMemoryException 堆转储

java - ElasticSearch - transllog 已关闭

java - 如何在使用数据绑定(bind)的 onclick 操作后更改 Activity

java - Android Studio 错误 : "Environment variable does not point to a valid JVM installation"

java - JVM GC 将对象降级到伊甸园空间?

java - G1 收集器在 Full GC 事件后占用较长的年轻代(minor gc)暂停时间

java - eclipse 内存分析器看到整个堆转储 (8GB) 的一小部分 (363,2MB)

java - 如何根据google java格式格式化代码