2011-07-03 36 views
16

我一直在一年的Java项目工作。我的代码几个月来一直工作正常。几天前,我将我的Mac上的Java SDK升级到最新版本1.6.0_26(Snow Leopard 10.6.8)。升级后,发生了一些非常奇怪的事情。当我运行一些类,我得到这个错误:在Java中的位置无效的内存访问

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

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

这是正常的代码不运行没有-XINT,但它的作品呢?我该怎么办?

在此先感谢

+1

非常奇怪。这是否显示为例外?编译错误?还有别的吗?错误消息中是否有更多文本?它是否表示行号?程序是否继续运行,还是炸毁?每次在没有-Xint的情况下运行代码时都会发生吗?您是否在使用Swing作为GUI?是否有任何潜在的并发问题? –

+2

不显示为例外,只是一条消息。它编译好。这是唯一的消息,有时会显示不同的内存地址,但只是相同的消息。程序停止运行。我没有使用Swing,但我正在使用线程。这可能是一个并发问题,但为什么在解释运行时不起作用?这是令人讨厌的部分。 –

+3

看起来像虚拟机中的一个错误。试着通过减少你的程序来分离问题(删除你认为不重要的东西 - 如果它不会再发生,请撤消并尝试其他部分,如果仍然存在,重复)。然后向任何制作您的JRE的人提交错误。 –

回答

4

当JVM开始崩溃那样,这是一个迹象,表明事情已经打破了JVM的执行模型。

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

你能做些什么呢?

不是很多。

  • 通过逐渐削减位来减少您的应用程序,直到您有一个显示问题的小型测试用例。
  • 基于测试用例,看看是否有一些经验的方法来避免这个问题。
  • 用测试用例向Apple提交错误报告。
+0

不,我的应用程序不包含任何本机代码,我没有使用任何第三方库。我会按照你的建议,让我们看看我花了多少时间来找到这个bug。谢谢! –

0

此外,请确认您正在构建的GUI上the event dispatch thread并且从不更新任何其他线程的GUI组件。

相关错误是非常难以复制的,但与改变时间相关的变化是暗示性的。

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 
+0

我有一个类似的问题,使用杰克逊。通过使用@JsonIgnore解决了我的问题 – Yevgeniy

0

请检查/etc/hosts是空的,并验证它包含以下配置:

127.0.0.1  localhost 
255.255.255.255 broadcasthost 
::1    localhost 
fe80::1%lo0  localhost 
相关问题