gpt4 book ai didi

java - 如果 jobobject 从 JNI 返回到 JAVA,我应该删除 GlobalRef 吗?

转载 作者:行者123 更新时间:2023-11-30 19:29:49 26 4
gpt4 key购买 nike

我想在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com