在我編寫的android代碼的jni層中,我從jni層返回一個數組到java層。我使用DeleteLocalRef()在傳遞結果之前釋放本地引用。我只是想確保我寫的代碼是正確的。請找到下面的代碼。任何幫助表示讚賞。在android中釋放本地引用JNI
extern "C"
{
JNIEXPORT jbyteArray JNICALL Java_com_jni_btRead(JNIEnv* env, jobject)
{
unsigned char* reply = btRead();
jbyteArray jba;
if(reply)
{
jba = env->NewByteArray(2048);
env->SetByteArrayRegion(jba, 0, 2048, reinterpret_cast<jbyte*>(reply));
}
else
{
jba = env->NewByteArray(0);
}
env->DeleteLocalRef(jba);
return jba;
}
}
其實你可以免費。如果你正在創建它們(例如在某個循環中),你應該這樣做,因爲默認情況下你只能得到16個(你可以通過EnsureLocalCapacity方法增加它)。從這裏引用((http://java.sun.com/docs/books/jni/html/refs.html)):「當本地方法返回給調用者時,Java虛擬機爲你釋放它們。但是,有當你,JNI程序員應該明確地釋放本地引用以避免內存使用過多時,請考慮以下情況......「 –