(JNI)是java代码返回的对象需要DeleteLocalRef吗?

ZSa*_*Lv0 8 java-native-interface

我已经在世界各地搜索过,知道如果它是在JNI代码中创建的话我们应该DeleteLocalRef
然后,如果对象是新的并且由Java代码返回,我是否也应该删除它?如:

// in java code
public SomeObject funcInJavaCode() {
    return new SomeObject();
}
// in jni code
funcInJNI {
    jobject obj = env->CallObjectMethod(...);
    ...
    // do i have to delete the obj here???
    env->DeleteLocalRef(obj);
}
Run Code Online (Sandbox Code Playgroud)

谢谢

jop*_*jop 5

不会。当本机函数返回到 Java(当 Java 调用本机时)或当调用线程与 JVM 分离时(在本机调用 Java 时),本地引用会被垃圾收集。DeleteLocalRef仅当您有一个长期存在的本机函数(例如,主循环)或在循环中创建大量瞬态对象时,才需要显式。