Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JNI中正确使用DeleteLocalRef_Java_Android_Reference_Garbage Collection_Java Native Interface - Fatal编程技术网

Java 在JNI中正确使用DeleteLocalRef

Java 在JNI中正确使用DeleteLocalRef,java,android,reference,garbage-collection,java-native-interface,Java,Android,Reference,Garbage Collection,Java Native Interface,下面是示例jni方法,我在其中创建一个字符串并将其返回给调用java方法: jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz ) { char test[100]; sprintf(test, "Test%03d.txt", rand()/100); jst

下面是示例jni方法,我在其中创建一个字符串并将其返回给调用java方法:

jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
                                                  jobject thiz )
{
    char test[100];
    sprintf(test, "Test%03d.txt", rand()/100);
    jstring returnVal = (*env)->NewStringUTF(env, test);
    (*env)->DeleteLocalRef(env,returnVal);
    return returnVal;
}
我希望jstring在调用java方法中无效,因为我删除了本地引用。但该引用仍然有效。我显式地调用了System.gc()以查看gc是否清除了它,但没有发生

据此:


我对这种不一致性有点困惑

您的目标SDK级别是什么?如果您的目标是13或更低(ICS之前),那么您将获得旧的JNI行为,并且此代码应该可以工作(尽管在技术上仍然不正确)

如果您的目标为14(ICS)或更高,则显示的代码将失败,并出现赠品错误:

memory map fault addr deadd00d
请注意,如果您以SDK 14+为目标,但在早期版本的Android上运行该应用程序,则代码也会起作用

memory map fault addr deadd00d