Java 中位置的内存访问无效

2022-09-03 07:52:33

我已经在Java项目上工作了一年。我的代码已经运行了几个月。几天前,我在Mac上将Java SDK升级到最新版本1.6.0_26(Snow Leopard 10.6.8)。升级后,发生了一些非常奇怪的事情。当我运行某些类时,我收到此错误:

位置的内存访问无效 0x202 rip=0x202

但是,如果我用-Xint(解释)运行它们,它们可以工作,速度很慢,但工作正常。我在使用按位运算符(游戏Othello的位板)的类中遇到了这个问题。我不能在这里放置任何代码,因为我没有得到错误,异常或类似的东西。我只是收到那个烦人的消息。

代码在没有 -Xint 的情况下无法运行,但可以使用它,这正常吗?我该怎么办?

提前致谢


答案 1

当JVM开始像这样崩溃时,这表明某些东西已经破坏了JVM的执行模型。

您的应用程序是否包含任何本机代码?它是否使用任何带有本机代码组件的第三方库?如果两者都不是真的,那么这很可能是JVM的Apple端口中的一个错误。它可能是 JIT 编译器错误,也可能是某些 JVM 本机代码库中的错误。

对于这样的错误,你能做些什么?

不是很多。

  • 通过逐步切除位来减少您的应用程序,直到您有一个表现出问题的小型测试用例。
  • 根据测试用例,看看是否有一些经验方法来避免这个问题。
  • 向 Apple 提交包含测试用例的错误报告。

答案 2

我刚刚遇到这种情况,结果发现它与一段代码有关,该代码正在序列化具有对自身的循环引用的JSON对象。我删除了循环,错误消失了。我怀疑这与内存溢出错误有关,现在Mac OSX上较新的JVM以不同的方式处理该错误。在这种情况下,我运行的是Mac OSX 10.7。

为了完整起见,我收到的错误是:

Invalid access of stack red zone 0x10e586d30 rip=0x10daabba6
Bus error: 10

和:

Invalid memory access of location 0x10b655890 rip=0x10a8baba6
Segmentation fault: 11

推荐