Java中对位置的内存访问无效

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

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

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

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

提前致谢

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

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

对于像这样的bug你能做些什么?

不是很多。

  • 通过逐步删除位来减少您的应用程序,直到您有一个显示问题的小测试用例。
  • 基于测试用例,看看是否有一些经验方法来避免这个问题。
  • 使用测试用例向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 

还要validation您是在事件分派线程上构建GUI,而不是从任何其他线程更新GUI组件。

众所周知,相关错误很难再现,但与时间改变相关的变化是有启发性的。

请检查/etc/hosts是否为空并validation它是否包含以下配置:

 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost fe80::1%lo0 localhost