Неверный доступ к красной зоне стека из 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)

Все, что я ищу, - это какое-то объяснение и советы о том, как избежать этого снова.

Заранее спасибо!

4 ответа

Решение

Не глядя на ваш код, трудно сказать, что является причиной ошибки, но здесь есть объяснение красной зоны, а также несколько ссылок, которые обсуждают проблему.

Каждый блок памяти, выделенный приложению, имеет начальную и конечную "красную зону", которая является специальной сигнатурой в памяти непосредственно перед и сразу после памяти, выделенной для приложения. Если приложение будет перезаписано за пределами этого региона, подпись красной зоны будет перезаписана. Затем в дальнейшем происходит сбой приложения, и вы получаете это завершение, когда память возвращается, и ОС может проверять красные зоны.

Эта проблема была обнаружена в 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 сегодня. Отследил это до того, что составило stackOverlfow в entitybean

Как уже упоминалось, это похоже на переполнение стелс-стека. Увеличьте параметр JVM размера стека (-Xss). В моем случае переход от -Xss128k к -Xss1024k добился цели.

В случае, если это полезно для кого-либо еще. Я столкнулся с этой ошибкой, потому что, если плохая строка передана JSONArray.fromObject(jsonString);

Я работаю: Java версия "1.6.0_29" Java(TM) SE Runtime Environment (сборка 1.6.0_29-b11-402-10M3527) Java HotSpot(TM) 64-битная виртуальная машина сервера (сборка 20.4-b02-402, смешанный режим) OSX 10.6.8

В самом начале у jsonString было нулевое значение, и ошибка была:

Недопустимый доступ к красной зоне стека 0x10d446ba0 rip=0x10c384b87

Ошибка шины

Это полностью убило JVM.

Как только я понял, что это плохая строка json, исправить это было легко.

Надеюсь, что это помогает кому-то.

Другие вопросы по тегам