Java VM EXCEPTION_ACCESS_VIOLATION的可能原因?

时间:2020-03-06 14:47:21  来源:igfitidea点击:

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

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

解决方案

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

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

我们还可以检查文件中的"堆"部分。许多VM错误是由垃圾回收引起的(尤其是在较旧的VM中)。本部分应向我们显示崩溃时垃圾是否在运行。此部分还显示堆的某些部分是否已填充(百分比数字)。

与其他情况相比,在内存不足的情况下,VM更有可能崩溃。

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

我们可以重复一遍吗?还是似乎是随机发生的?我们最近遇到了一个问题,就是我们的JVM随机崩溃。原来这是一个硬件问题。我们将驱动器放在新服务器中,然后它完全消失了。

最重要的是,JVM应该永远不会崩溃,因为如果我们不执行任何JNI,则上面提到的内容就是我的直觉,那就是我们遇到了硬件问题。

如果我们知道要查找的内容,则问题的原因将记录在hs_err *文件中。看一看,如果仍然不清楚,请考虑发布堆栈跟踪的前5或者10行以及其他相关信息(不要发布整个内容,那里有大量信息将无济于事,我们必须找出哪1%重要:-))

我们是否正在使用浏览器小部件并在浏览器小部件中执行javascript?如果是这样,则在各种Windows库中,某些版本的SWT中存在一些错误,这些错误会导致JVM在本机代码中崩溃。

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

如果我们不使用浏览器窗口小部件,那么这些建议将无济于事。在这种情况下,我们可以搜索导致JVM崩溃的SWT错误列表。如果这些都不是问题,那么我强烈建议我们使用SWT打开错误报告。