当 Java VM 因 EXCEPTION_ACCESS_VIOLATION 崩溃并生成 hs_err_pidXXX.log 文件时,这表明了什么?错误本身基本上是一个空指针异常。它总是由 JVM 中的错误引起的,还是有其他原因,例如硬件故障或软件冲突?
编辑:有一个本机组件,这是 win32 上的 SWT 应用程序。
大多数情况下,这是 VM 中的错误。但它可能是由任何本机代码(例如 JNI 调用)引起的。
hs_err_pidXXX.log 文件应包含有关问题发生位置的一些信息。
您还可以检查文件内的“堆”部分。许多 VM 错误是由垃圾收集引起的(尤其是在较旧的 VM 中)。本部分应向您显示崩溃时垃圾是否正在运行。此部分还显示,如果堆的某些部分被填充(百分比数字)。
与其他情况相比,VM 在内存不足的情况下也更有可能崩溃。
找到答案了!
我遇到了同样的错误,并注意到提供 pid 日志文件内容的其他人正在运行 64 位 Windows。就像我。在最后的日志文件中,它包含 PATH 语句。在那里我可以看到 C:\Windows\SysWOW64 被错误地列在前面:%SystemRoot%\system32。一旦我纠正它,异常就消失了。
您应该做的第一件事是将 JVM 升级到最新版本。
你能重复一下这个问题吗?或者它似乎是随机发生的?我们最近遇到了一个问题,即我们的 JVM 在各处随机崩溃。原来是硬件问题。我们将驱动器放在新服务器中,它完全消失了。
最重要的是,JVM 不应该崩溃,正如上面的海报所提到的,如果你没有做任何 JNI,那么我的直觉是你有硬件问题。
如果您知道要查找的内容,问题的原因将记录在 hs_err* 文件中。看一看,如果仍然不清楚,请考虑发布堆栈跟踪的前 5 或 10 行和其他相关信息(不要发布整个内容,那里有大量信息无济于事 -但你必须弄清楚哪 1%是重要的 :-) )
您是否使用浏览器小部件并在浏览器小部件中执行 javascript?如果是这样,那么某些版本的 SWT 中存在导致 JVM 在本机代码和各种 Windows 库中崩溃的错误。
两个例子(我打开的)是bug 217306和bug 127960。然而,这两个错误报告并不是 JVM 在 SWT 中崩溃的唯一错误报告。
如果您没有使用浏览器小部件,那么这些建议对您没有帮助。在这种情况下,您可以搜索导致 JVM 崩溃的 SWT 错误列表。如果这些都不是您的问题,那么我强烈建议您使用 SWT 打开错误报告。
我已经使用了很长时间并且非常可靠的 JNLP 应用程序也有同样的问题。我从 Windows 7 升级到 Windows 10 后立即出现问题。根据我的调查,这很可能是 Win 10 中的一个错误。
以下不是解决方案,而是一个丑陋的解决方法。在 jre/bin 目录下,有javaws.exe。如果我右键单击 /Properties/Compatibility并勾选Run this program as an administrator,JNLP 应用程序开始工作。
请注意,这种方法可能会导致安全问题,并且只有在您没有其他选择并且 100% 知道您在做什么时才使用它。