#java #c #java-native-interface
#java #c #java-native-interface
Вопрос:
Я пытаюсь вызвать JNI_CreateVM после вызова destroyVM, но он всегда возвращает -1. Это ошибка в JDK?
Я нашел следующую ссылку, которая описывает ту же проблему: Ошибка JNI
По ссылке приведен пример кода, который воспроизводит проблему, с которой я столкнулся. У кого-нибудь есть идея, как решить эту проблему?
Спасибо,
Сами
Комментарии:
1. Этот вопрос касается Sun JVM или DRLVM?
2. Речь идет о Sun JVM. Но это единственная ссылка, которую мне удалось найти, которая воспроизводит эту проблему. Я воспроизвел его на своей стороне и получил тот же результат (-1 при втором createVM)
3. Вы уверены, что ваш вызов DestroyJavaVM прошел успешно?
4. Да, возвращаемое значение уничтожения виртуальной машины Java равно 0.
Ответ №1:
Я столкнулся с этой проблемой давным-давно. Вот соответствующая запись об ошибке — http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4712793
Комментарии:
1. Спасибо за ссылку. Похоже, что нет планов по ее решению.
Ответ №2:
Я нашел пару сообщений на форуме, в которых сообщается, что CreateJavaVM / DestroyJavaVM / CreateJavaVM не работает; например
- http://lists.apple.com/archives/java-dev/2004/Mar/msg00966.html
- http://comments.gmane.org/gmane.comp.jakarta.poi.user/11742
Консенсус заключается в том, что DestroyJavaVM не работает полностью из-за ограничений в JVM. Некоторые люди сообщают, что он постоянно возвращает значение -1. Даже спецификация JNI намекает на ограничения.
Похоже, в базе данных ошибок нет записи для этого, но может быть просто, что Oracle закрыла / удалила / скрыла более ранние записи. (Похоже, недавно они провели «генеральную уборку» общедоступного представления базы данных, и поиск часто не работает должным образом.)
Комментарии:
1. Спасибо за ответ. Я попытаюсь открыть запись в базе данных ошибок и посмотреть, что произойдет.
2. Не задерживайте дыхание. Это ограничение, похоже, существует уже долгое время.
3. @StephenC Я знаю, что это старый вопрос. Сейчас я сталкиваюсь с той же проблемой, и я не смог найти никакого обходного пути для этого. Есть ли что-нибудь альтернативное, что можно сделать по этому поводу.
4. AFAIK, нет, это не так.