Java中位置的内存访问无效

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

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

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

但是,如果我用-Xint(解释)运行它们,它们工作缓慢但工作正常。我在使用按位运算符的类中遇到了这个问题(游戏“黑白棋”的棋盘)。我不能在这里放任何代码,因为我没有得到一个错误,异常或类似的东西。我只是得到那个令人讨厌的消息。

代码不运行没有-XINT,但它适用于它是正常的吗?我该怎么办?

提问于
用户回答回答于

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

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

你能做些什么呢?

不是很多。

  • 逐步削减位,直到你有一个小问题的测试用例,以减少你的应用程序。
  • 基于测试用例,看看是否有一些经验的方法来避免这个问题。
  • 使用测试用例向Apple提交错误报告。
用户回答回答于

我刚刚遇到了这种情况,事实证明它与一段代码相关,该代码将序列化一个带有循环引用的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

扫码关注云+社区