相关疑难解决方法(0)

为什么我不应该在JNI中重用jclass和/或jmethodID?

这是一个与前一篇文章相关的问题,但这篇文章已经解决,现在我想改变问题的方向.

使用JNI时,有必要询问JNIEnv对象jclass以及jmethodID将在C/C++代码中使用的每个类和方法.为了清楚起见,我想从C/C++调用Java构造函数或方法.

由于从Java到C/C++(反之亦然)的通信成本很高,我最初认为最小化这种方法的一种方法是重用jclassjmethodID.因此,我将此实例保存在全局变量中,如下所示:

jclass    someClass  = NULL;
jmethodID someMethod = NULL;

JNIEXPORT jobject JNICALL Java_example_method1(JNIEnv *env, jobject jobj) {
    // initialize someClass and someMethod if they are NULL
    // use someClass and someMethod to call java (for example, thru NewObject)
}

JNIEXPORT jobject JNICALL Java_example_method2(JNIEnv *env, jobject jobj) {
    // initialize someClass and someMethod if they are NULL
    // use someClass and someMethod to call java again
} …
Run Code Online (Sandbox Code Playgroud)

java java-native-interface

35
推荐指数
3
解决办法
2万
查看次数

标签 统计

java ×1

java-native-interface ×1