2015-12-02 64 views
9

问题防止程序的痕迹

为什么VisualVM的试图查看对象分配堆栈跟踪时终止我的程序,以及如何解决这个问题?


我清理它有一些内存的问题,应用程序中的最大的问题是创造了一堆短命int[]导致GC火像疯了似的:

enter image description here

当我右键单击int[]并选择拍摄快照和显示分配堆栈轨迹,我的应用程序关闭并弹出一个警告框,说无法获得结果快照。该应用程序终止

enter image description here

我关于这个问题发现的最接近的事情是一个bug报告,其中recommended running my profiled application with -Xnoclassgc。它没有奏效,结果是一样的。


规格

VisualVM: 1.8.0_60 (Build 1380-140910); platform 20140910-unknown-revn 
Java: 1.8.0_60; Java HotSpot(TM) 64-Bit Server VM (25.60-b23, mixed mode) 
Eclipse: Luna Release (4.4.0) Build id: 20140612-0600 
System: Windows 7 (6.1) Service Pack 1, amd64 64bit 

崩溃日志

http://pastebin.com/a4YPWutj

崩溃日志的超出大小字符限制,所以我不得不把它放在别处。抱歉。

+0

只是先问几个问题: 1. Eclipse是否与您刚才描述的这种情况有关?您列出了您的Eclipse版本,但没有提及任何其他方式。 2. Java和系统信息是否来自您运行应用程序的服务器? –

+0

此外,应用程序崩溃应导致保存用于调试目的的崩溃报告。你能找到文件(hprof?)并粘贴相关内容吗? –

+0

你测试Java Mission Control(jmc.exe)吗?这是相同的工具,但Java8有一些没有免费的功能。但是你可以做到与VisualVM相同的功能。 –

回答

5

好的。因此,基于所获得的系统崩溃日志,它看起来像你碰到了在这里已经报道了VisualVM的错误:

JVM being profiled crashes

原有的BUG提交缩小这种行为降到Java8,所以最好的机会,你有在较旧的(Java7)运行时上运行VisualVM。如果这是您的选择,那么您只需要下载Java7 JDK并直接从那里运行VisualVM。

+0

唉,我想我现在可以开始使用JMC了,因为使用Java 7不是一个选项/:感谢您找到这个! –