从Java VM无效访问堆栈红区

我试图弄清楚在Java中可能导致此错误的原因:

Invalid access of stack red zone 0x115ee0ed0 rip=0x114973900 

有没有人遇到过这个错误信息? 它实际上是在杀死JVM,一切都停在那里。

我目前正在使用这个版本的Java :(在OS X 10.6上)

 java version "1.6.0_15" Java(TM) SE Runtime Environment (build 1.6.0_15-b03-219) Java HotSpot(TM) 64-Bit Server VM (build 14.1-b02-90, mixed mode) 

我正在寻找的是关于如何避免再次发生这种情况的某种解释和提示。

提前致谢!

在不查看代码的情况下,很难说出导致错误的原因,但这里有关于红区的解释以及很少讨论问题的链接。

分配给应用程序的每个内存块都带有一个前导和尾随的“redzone”,它是在分配给应用程序的内存之前和之后的内存中的特殊签名。 如果应用程序要覆盖此区域之外,则会覆盖红色区域签名。 然后在应用程序崩溃后,当内存返回时,你会得到这个exception终止,操作系统可以检查红色区域。

这个问题已在Mac OSX上找到,因此当找不到类时它可能与类加载器问题有关,但在mac osx上,它被报告为红区访问。 所以尝试使用JDK 1.5,看看你是否可以重现这个问题。

http://osdir.com/ml/java.objectweb.asm/2007-07/msg00004.html

http://wiki.geneontology.org/index.php/OEWG_20090505

http://forums.oracle.com/forums/thread.jspa?threadID=429325

我今天在OSX上发现了同样的错误。 跟踪它到了entitybean中的stackOverlfow

如前所述,这似乎是隐形堆栈溢出。 压缩堆栈大小的JVM参数(-Xss)。 在我的情况下,从-Xss128k到-Xss1024k就可以了。

如果这对其他人有帮助。 我遇到了这个错误,因为如果一个错误的字符串传递给JSONArray.fromObject(jsonString);

我正在运行:java版“1.6.0_29”Java(TM)SE运行时环境(版本1.6.0_29-b11-402-10M3527)Java HotSpot(TM)64位服务器VM(版本20.4-b02-402,混合模式)OSX 10.6.8

jsonString在一开始就有一个空值,错误是:

堆栈红色区域0x10d446ba0 rip = 0x10c384b87无效访问

总线错误

这完全杀死了jvm。

一旦我发现它是坏的json字符串,修复很容易。

希望能帮助别人。