这里的规则很明确。方法ID和字段ID的值是永远不变的。您可以挂在他们身上。查找需要一些时间。
jclass另一方面,通常是 本地参考 。本地引用最多只能在一次调用JNI函数的过程中保留下来。
如果需要优化,则必须要求JVM为您提供全局引用。获取并保留对诸如的通用类的引用并不少见
java.lang.String。
当然,持有此类对类的引用将防止它(类)被垃圾回收。
jclass local = env->FindClass(CLS_JAVA_LANG_STRING);_CHECK_JAVA_EXCEPTION(env);java_lang_string_class = (jclass)env->NewGlobalRef(local);_CHECK_JAVA_EXCEPTION(env);env->DeleteLocalRef(local);_CHECK_JAVA_EXCEPTION(env);
检查宏调用:
static inline voidcheck_java_exception(JNIEnv *env, int line){ UNUSED(line); if(env->ExceptionOccurred()) {#ifdef DEBUG fprintf(stderr, "Java exception at rlpjni.cpp line %dn", line); env->ExceptionDescribe(); abort();#endif throw bt_rlpjni_java_is_upset(); }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)