如果 jobject 从 JNI 返回到 JAVA,我应该 DeleteGlobalRef 吗?

should I DeleteGlobalRef if the jobject is returning from JNI to JAVA?

我想在 JNI 中存储一个 java 对象。所以我

jobject gRefObj = (*env)->NewGlobalRef(env, obj);

之后我想从其他线程和从 java 调用 jni 到 return 对象取回 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;
}