Подтвердить что ты не робот

Недопустимый доступ к памяти в местоположении Java

Я работаю над проектом Java за год. Мой код работал отлично в течение нескольких месяцев. Несколько дней назад я обновил Java SDK до самой новой версии 1.6.0_26 на своем Mac (Snow Leopard 10.6.8). После обновления происходит что-то очень странное. Когда я запускаю некоторые из классов, я получаю эту ошибку:

Недопустимый доступ к памяти для местоположения 0x202 rip = 0x202

Но, если я запускаю их с -Xint (интерпретируется), они работают медленными, но работают нормально. Я получаю эту проблему в классах, где я использую побитовые операторы (биты для игры Othello). Я не могу здесь вводить код, потому что у меня нет ошибки, исключения или чего-то подобного. Я просто получаю это раздражающее сообщение.

Нормально ли, что код не работает без -Xint, но он работает с ним? Что мне делать?

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

4b9b3361

Ответ 1

Когда JVM запускается таким образом, это признак того, что что-то нарушило модель исполнения JVM.

Имеется ли в вашем приложении какой-либо собственный код? Использует ли он какие-либо сторонние библиотеки с собственными компонентами кода? Если ни одно не верно, то есть вероятность, что это ошибка в порте Apple JVM. Это может быть ошибка компилятора JIT или ошибка в некоторой JVM-библиотеке.

Что вы можете сделать с такой ошибкой?

Не много.

  • Уменьшите количество приложений, постепенно сокращая бит до тех пор, пока у вас не будет небольшой тестовый файл, который обнаруживает проблему.
  • Основываясь на тестовом сценарии, посмотрите, есть ли какой-то эмпирический способ избежать этой проблемы.
  • Отправьте отчет об ошибке в Apple с помощью тестовой системы.

Ответ 2

Я только что наткнулся на эту ситуацию, и это оказалось связано с фрагментом кода, который сериализовал объект JSON с циклической ссылкой на себя. Я удалил цикл, и ошибка исчезла. Я подозреваю, что это связано с ошибкой переполнения памяти, которая теперь обрабатывается по-разному новыми JVM на Mac OSX. В этом случае я запускал 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

Ответ 3

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

Связанные ошибки, как правило, трудно воспроизвести, но изменение, связанное с измененным временем, наводит на размышления.

Ответ 4

Убедитесь, что /etc/hosts пуст и убедитесь, что он содержит следующие конфигурации:

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