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

时间:2011-07-03 03:14:27

标签: java jvm

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

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

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

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

提前致谢

4 个答案:

答案 0 :(得分:4)

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

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

你可以对这样的bug做些什么?

不是很多。

  • 通过逐步删除位来减少您的应用程序,直到您有一个显示问题的小测试用例。
  • 根据测试用例,看看是否有一些经验方法可以避免这个问题。
  • 使用测试用例向Apple提交错误报告。

答案 1 :(得分:4)

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

答案 2 :(得分:0)

同时验证您是否在the event dispatch thread上构建GUI,并且永远不会从任何其他线程更新GUI组件。

众所周知,相关错误难以复制,但与时间改变相关的变化具有启发性。

答案 3 :(得分:0)

请检查/etc/hosts是否为空并验证其是否包含以下配置:

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