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:应用程序终止后如何进行堆转储?的主要内容,如果未能解决你的问题,请参考以下文章