JVisualvm:应用程序终止后如何进行堆转储?

Posted

技术标签:

【中文标题】JVisualvm:应用程序终止后如何进行堆转储?【英文标题】:JVisualvm:How to take heap dump after the application terminated? 【发布时间】:2013-01-07 11:02:32 【问题描述】:

我搜索了它,但没有找到在应用程序终止后获取堆转储的任何方法。

从 eclipse 我触发了一个使用 eclipse 插件开发创建新项目的过程。在代码级别,我有两种创建新项目的方法。 我想比较这两种方法。

我使用 JVsualVm 来分析在创建新项目生成过程中生成的数据。

当我的进程执行结束时,我想对该正在运行的应用程序进行堆转储。

但问题是运行进程停止后,它正在从 JvisulaVM 的应用程序视图中删除,我无法对其进行堆转储。

那么有什么方法可以从 JVisualVm 获取已停止应用程序的堆转储,因为我仍然打开了该正在运行的应用程序的选项卡,但该应用程序已从应用程序视图树中删除。

【问题讨论】:

好问题。只是为了好奇这是哪种类型的应用程序? 它可以是任何应用程序,但在我的情况下,它是一个 Eclipse 插件开发项目,它是根据传递的参数创建 android 或 blackberry 项目。实际上我有两种创建项目的方法,所以只想知道哪种方法在堆和 cpu 使用方面更好。 【参考方案1】:

这根本不可能。应用程序终止后,它的内存,包括堆,都消失了。

【讨论】:

感谢您的回复,但该应用程序的选项卡仍处于打开状态,我也可以看到数据。所以我认为应该有一些内存区域存放这些数据,也许我们可以创建堆转储从那。【参考方案2】:

您可以在应用程序结束时以编程方式创建它: https://blogs.oracle.com/sundararajan/entry/programmatically_dumping_heap_from_java

好的,这还没有完全结束,但可能足以满足您的需求。

【讨论】:

【参考方案3】:

即使我尝试从 JVisualVM 获取我创建的 MBean 的堆详细信息也是如此。

我知道一旦应用程序执行完成,我们就无法从中获取详细信息。

[已编辑]

当然,选项卡仍保留在 JVisualVM 中,它们无法处理。

【讨论】:

以上是关于JVisualvm:应用程序终止后如何进行堆转储?的主要内容,如果未能解决你的问题,请参考以下文章

jvisualvm:卡在“加载堆转储”屏幕上

jvisualvm - 如何查看具有内存消耗的活动对象

捕获系统堆转储数据关闭

如何让“jvisualvm Threads Inspector”工作?

获取JVM堆内存转储的常用方法

jvisualvm的使用