JNI:AttachCurrentThread返回-1

时间:2016-04-07 20:14:20

标签: java multithreading java-native-interface

我已经为库创建了一个带有swig的JNI包装器。我使用swig director来回调JVM。其中一些回调发生在本机库中创建的线程上。非JVM线程上的第一个回调失败了一个SIGSEGV,我可以追踪到忽略AttachCurrentThread的负返回值(-1),从而解除引用实际为null的jenv指针。这发生在swig生成的代码中。

我试图通过我在本机创建的线程中的di​​rector类回调到JVM。这很好用。然而,它确实无法使用我包装的库创建的线程。

AttachCurrentThread失败的原因是什么?

1 个答案:

答案 0 :(得分:1)

当一个线程没有足够的堆栈空间时,AttachCurrentThread失败。遗憾的是,Oracle JVM的文档没有提到AttachCurrentThread工作所需的最小堆栈空间。

在我的情况下,本机库针对嵌入式硬件进行了优化,因此通常创建堆栈大小为100000字节的线程。