Недопустимый доступ к памяти в местоположении Java
Я работаю над проектом Java за год. Мой код работал отлично в течение нескольких месяцев. Несколько дней назад я обновил Java SDK до самой новой версии 1.6.0_26 на своем Mac (Snow Leopard 10.6.8). После обновления происходит что-то очень странное. Когда я запускаю некоторые из классов, я получаю эту ошибку:
Недопустимый доступ к памяти для местоположения 0x202 rip = 0x202
Но, если я запускаю их с -Xint (интерпретируется), они работают медленными, но работают нормально. Я получаю эту проблему в классах, где я использую побитовые операторы (биты для игры Othello). Я не могу здесь вводить код, потому что у меня нет ошибки, исключения или чего-то подобного. Я просто получаю это раздражающее сообщение.
Нормально ли, что код не работает без -Xint, но он работает с ним? Что мне делать?
Заранее спасибо
Ответы
Ответ 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