我相信我在 IBM JDK 的 JNI 实现上遇到了一个错误。
我正在研究 Apache ActiveMQ Artemis,我们最近不得不进行以下修复,因为我们在 IBM JDK 1.8 上遇到问题:
https://github.com/apache/activemq-artemis/commit/18e41963b61a5ef6dbcdb150e27c07c062deaa66
问题在于在 methodID 上获取 NewGlobalRef,它大概也是一个对象。如果您通过 Sun JDK 获得 NewGlobalRef(MethodID) 一切都很好,但如果您在 IBM JDK 上进行,那么您将获得 GPF。
我可以通过删除 NewGlobalRef 来修复 Artemis Native 层(因为我相信我最终不需要),但 JVM 仍然不应该因此而核心转储。
我已经整理了一个复制问题的项目: https ://github.com/clebertsuconic/simple-JNI-bug
如果您恢复上次提交,或者在方法 ID 上注释 NewGlobalRef 周围的代码,一切都会通过。