Я считаю, что я ударил ошибку в IBM JDK о реализации JNI.Почему NewGlobalRef станет основным дампом JNI на IBM JDK?
Я работаю над Apache ActiveMQ Артемиды и недавно мы должны были сделать this following fix, как у нас были проблемы на IBM JDK 1.8:
https://github.com/apache/activemq-artemis/commit/18e41963b61a5ef6dbcdb150e27c07c062deaa66
Выпуск вокруг эквайринга NewGlobalRef на более methodID, который предположительно, также является объектом. Если вы приобретете NewGlobalRef (MethodID) через Sun JDK, все будет в порядке, но если вы сделаете это на IBM JDK, тогда вы получите GPF.
Я мог бы исправить родной слой Artemis, удалив NewGlobalRef (как мне кажется, мне не нужно было в конце), но из-за этого JVM не должен сбрасывать ядро.
я соединил проект тиражирования вопроса: https://github.com/clebertsuconic/simple-JNI-bug
если вы убираете последнее коммят или прокомментировать код вокруг NewGlobalRef на методе ID все пройдет.
Спасибо ... Oracle JDK также потерпит неудачу, если вы пройдете -Xcheck: jni. Я не знал об этом. сделают это частью моих параметров уверенности, поэтому мой модульный тест поймает любые будущие проблемы. спасибо –