Tag: 堆转储

JVisualVM可以“堆转储”按钮释放内存吗?

我有一个非常奇怪的问题。 我正在开发一个基于Eclipse Equinox的OSGi应用程序; 它是使用OSGi Log Service(Equinox实现)开发的,现在我正在使用Apache Felix OSGi Log Service实现进行测试。 在API /代码方面,一切正常:OSGi日志服务是标准的,所以我可以毫无问题地从Equinox交换到Felix。 但是,我观察到了这种奇怪的行为:我将应用程序作为控制台程序启动,在控制台上查看日志输出,并将JVisualVM连接到它以分析内存使用情况; JVisualVM图显示了一个80 MB的堆。 13个小时后,平均堆大小达到220 MB,所以我决定分析堆转储,并按下“堆转储”按钮:在此操作之后,JVisualVM图显示使用的堆为20(min)-35 (最大)MB(?!?!),这个值是常数。 “堆转储”操作可以释放近200 mbs吗? 如果是,为什么? 我从未在Equinox OSGi Log Service实现中看到这种行为,所以我怀疑Felix Log涉及这个问题…… 谢谢

以编程方式分析java堆转储文件

我想编写一个程序(最好用java)来解析和分析java堆转储文件(由jmap创建)。 我知道有很多很棒的工具已经这样做了(jhat,eclipse的MAT等等),但是我想从特定的角度分析堆到我的应用程序。 我在哪里可以阅读有关堆转储文件的结构,如何阅读它的示例等等? 没有找到任何有用的搜索它… 非常感谢。

如何仅使用JRE生成堆转储?

我们在生产环境中安装了JRE,但没有安装JDK。 JRE和OS的版本如下。 [me@mymachine ~]$ java -version java version “1.6.0_45” Java(TM) SE Runtime Environment (build 1.6.0_45-b06) Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode) [me@mymachine ~]$ uname -a Linux mymachine.mydomain.com 3.10.35-43.137.amzn1.x86_64 #1 SMP Wed Apr 2 09:36:59 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux 似乎“jmap”工具不存在于系统的任何位置,并且没有root访问权限,我无法在任何系统位置安装它。 我该怎么做才能获得堆转储(即生成.hprof文件)? 另外,如果重要的话,我们正在使用JBoss 7.1.3.AS。

如何以编程方式获取jmap直方图?

我想从受监控的应用程序内部以编程方式获得jmap -histo的输出。 我看到通过HotSpot诊断bean可以触发二进制堆转储,但我看不到如何获取直方图数据。 可能吗 ?