ReleaseFloatArrayElements和DeleteLocalRef之间有什么区别

问题描述:

我正在尝试使用JNI来做一个android应用程序。我有作为输入的阵列(jfloatArray featurePoints)的方法:ReleaseFloatArrayElements和DeleteLocalRef之间有什么区别

jfloat* flt1 = env->GetFloatArrayElements(featurePoints,0); 

使用此阵列我试图释放内存之后。我应该使用

env->ReleaseFloatArrayElements(featurePoints, flt1, 0); 

env->DeleteLocalRef(featurePoints); 

你需要调用ReleaseXxArrayElement()当你使用GetXxArrayElements()撤消工作。

env->ReleaseFloatArrayElements(featurePoints , (jfloat *)flt1, 0); 
// we cleanup local ref 
env->DeleteLocalRef(featurePoints); 
+0

值得注意的是,GetArrayElements不会返回一个Object,所以没有本地引用来释放。删除数组对象的本地ref也是有用的,但这是一个独立的决定。另请参阅http://developer.android.com/training/articles/perf-jni.html。 – fadden 2013-05-03 20:23:42