Java VM EXCEPTION_ACCESS_VIOLATION的可能原因?

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

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

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

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

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

在内存不足的情况下,虚拟机也更有可能崩溃。

find答案!

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

你应该做的第一件事是升级你的JVM到最新的你可以。

你能重复这个问题吗? 或者似乎是随机发生的? 我们最近遇到了一个问题,那就是随机的时候,我们的JVM崩溃了。 原来这是一个硬件问题。 我们把驱动器放在一个新的服务器上,它完全消失了。

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

问题的原因将logging在hs_err *文件中,如果您知道要查找什么。 看看,如果还不清楚的话,可以考虑发布堆栈跟踪的前5到10行和其他相关信息(不要发布整个事情,那里有很多信息,但你必须弄清楚哪一个重要的:-))

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

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

如果你不使用浏览器小部件,那么这些build议不会帮助你。 在这种情况下,您可以search导致JVM崩溃的SWT错误列表。 如果这些都不是你的问题,那么我强烈build议你用SWT打开一个错误报告。

我和我已经使用了很长时间的JNLP应用程序有相同的问题,而且相当可靠。 从Windows 7升级到Windows 10后,问题立即出现。根据我的调查,这很可能是Win 10中的一个错误。

以下是不是一个解决scheme,但一个丑陋的解决方法。 在jre / bin目录下,有javaws.exe 。 如果我右键单击 /属性/兼容性并勾选以pipe理员身份运行此程序 ,JNLP应用程序开始工作。

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