我想在 JNI 中存储一个 java 对象。所以我愿意
jobject gRefObj = (*env)->NewGlobalRef(env, obj);
之后,我想从其他线程以及从 java 调用 jni 取回 jobject 以返回对象。我也是这么做的。
(*_env)->DeleteGlobalRef(_env, gRefObj ); // if remove this line, it will work
return gRefObj; // From jni return to java
然后我得到了 classCastException,但是如果我删除 DeleteGlobalRef,它就可以正常工作。 java使用完后会删除吗?
最佳答案
根据@mkaes和@Michael的评论,我尝试这样做
JNIEXPORT jobject JNICALL Java_com_sample_getMyObject(JNIEnv *env, jobject obj) {
jclass clz = (*env)->GetObjectClass(env, obj);
// .. doing something
jobject lRefObj = (*env)->NewLocalRef(env, gRefObj);
(*env)->DeleteGlobalRef(env, gRefObj);
(*env)->DeleteLocalRef(env, clz);
return lRefObj;
}
关于java - 如果 jobobject 从 JNI 返回到 JAVA,我应该删除 GlobalRef 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52333841/