作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 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/
我最近在做很多 JNI 工作,想监视(或至少转储)jni globalref 池的内容。 Google 尚未提供任何有用信息。 我注意到,如果您确实触发了 globalref-pool 耗尽,它会列出
我想在 JNI 中存储一个 java 对象。所以我愿意 jobject gRefObj = (*env)->NewGlobalRef(env, obj); 之后,我想从其他线程以及从 java 调用
我是一名优秀的程序员,十分优秀!