基本原则:
①:GetStringUTFChars 和 ReleaseStringUTFChars,GetXXArrayElements 和 ReleaseXXArrayElements,必须对应起来,否则会导致内存泄漏。注意,在Release之后,不能在使用Get获得的数据。
②:如果是在JNI函数内通过NewStringUTF、NewXXXArray或NewObject创建的java对象无论是否需要返回java层,都不需要手动释放,jvm会自动管理。但是如果是通过 AttachCurrentThread 创建的 JNIEnv 去New的对象,必须通过 DeleteLocalRef 方式及时删除,因为在线程销毁之前,创建的对象无法自动回收。
③:通过 NewGlobalRef 、NewLocalRef创建的对象必须手动释放,对应DeleteGlobalRef 、DeleteLocalRef 。
④:FindClass 和 GetMethodID 不需要释放。
⑤:如果不是通过 NewGlobalRef 函数创建的java对象不能跨线程调用,jclass 也是 jobject,如果是在 JNI_OnLoad 创建,那么必须通过 NewGlobalRef 函数处理后才能正常使用。
⑥:通过malloc开辟的内存地址,在使用结束后一定要调用free进行释放。
........待完善