2008-09-26 67 views
27

当一个Java虚拟机与一个EXCEPTION_ACCESS_VIOLATION崩溃并产生一个hs_err_pidXXX.log文件时,这表明什么?错误本身基本上是一个空指针异常。它是否总是由JVM中的错误引起的,还是有其他原因,例如硬件或软件故障冲突?Java VM EXCEPTION_ACCESS_VIOLATION的可能原因?

编辑:有一个本地组件,这是一个在win32上的SWT应用程序。

+1

你是否在做任何涉及Java3D之类的本地代码? – 2008-09-26 15:12:35

回答

14

大多数情况下,这是虚拟机中的一个错误。 但它可能是由任何本机代码(例如,JNI调用)引起的。

hs_err_pidXXX.log文件应包含有关发生问题的位置的一些信息。

您还可以检查文件中的“堆”部分。许多虚拟机错误是由垃圾收集引起的(特别是在较旧的虚拟机中)。本部分应该显示垃圾是否在崩溃时运行。此部分还显示,如果堆的某些部分被填充(百分比数字)。

虚拟机在内存不足的情况下崩溃的可能性也要大得多。

+0

如何检查垃圾收集器是否在崩溃期间运行? – 2016-01-18 07:21:12

1

您应该做的第一件事就是将您的JVM升级到最新版本。

你能重复一下这个问题吗?或者它似乎是随机发生的?我们最近出现了一个问题,我们的JVM在随机时间在各处崩溃。原来这是一个硬件问题。我们把硬盘放在一台新的服务器上,它完全消失了。

底线,JVM不应该崩溃,如上面提到的海报,如果你没有做任何JNI,那么我的直觉是你有硬件问题。

+0

您能否介绍一下确切的问题?我正在努力解决这样的错误,并思考如何检测硬件问题。 – 2010-03-03 12:30:31

+0

检测硬件问题的一种方法是查看窗口的“事件查看器”。硬件问题在那里会有很大的变化。 – frewper 2012-12-28 06:09:40

1

如果您知道要查找什么,问题的原因将记录在hs_err *文件中。看一看,如果还不清楚,可以考虑发布堆栈跟踪的前5行或10行以及其他相关信息(不要发布整个事情,那里有大量信息无法帮助 - 但你必须弄清楚哪个1%重要:-))

0

您是否使用浏览器小部件并在浏览器小部件中执行javascript?如果是这样,那么在某些版本的SWT中会出现一些错误,导致JVM在各种Windows库中的本地代码中崩溃。

两个例子(我打开)是bug 217306bug 127960。但是,这两个错误报告并不是SWT中JVM崩溃的唯一错误报告。

如果您不使用浏览器小部件,那么这些建议不会对您有所帮助。在这种情况下,您可以搜索SWT bugs causing a JVM crash的列表。如果这些都不是你的问题,那么我强烈建议你用SWT打开一个错误报告。

3

找到了答案!

我有同样的错误,并注意到其他谁提供的pid日志文件的内容运行64位Windows。就像我。在结束日志文件中,它包含PATH语句。在那里我可以看到C:\ Windows \ SysWOW64错误地列在%SystemRoot%\ system32之前。一旦我纠正它,例外消失。

0

我有一个长期使用JNLP应用程序的问题,并且相当可靠。从Windows 7升级到Windows 10后,问题立即开始。根据我的调查,这很可能是Win 10中的一个bug。

以下不是解决方案,而是一种丑陋的解决方法。在jre/bin目录中,有javaws.exe。如果我右键点击/属性/兼容性并打勾以管理员身份运行该程序,JNLP应用程序开始工作。

请注意,这种方法可能会导致安全问题,只有在没有其他选择的情况下才能使用,并且100%知道您在做什么。

相关问题