标题
[android] ndk 中还是不要用批量释放局部引用的函数对的好,一个个手工释放更安全
clq
浏览(538) +
2022-01-18 12:21:48 发表
编辑
关键字:
[android] ndk 中还是不要用批量释放局部引用的函数对的好,一个个手工释放更安全
//还是不要用批量函数为好,因为很容易漏掉对应的结束函数(会形成不可预测的函数对情况)。而单个的漏掉,还有自动回收补偿
//代替 env->DeleteLocalRef 的批量操作,注意返回值是不能 DeleteLocalRef 的
//use_count 一般用 10 就可以了 -- 局部函数中使用的本地变量个数
void ndk_ref_local_get(JNIEnv* env, int use_count)
{
//----
//(*env)->PushLocalFrame(env, 10); //Frame1 //应该是本函数中申请使用多少个变量
(*env)->PushLocalFrame(env, use_count); //Frame1 //应该是本函数中申请使用多少个变量
//----
//------------------------------------------------
//PushLocalFrame 为一定数量的局部引用创建了一个使用堆栈,而 PopLocalFrame 负责销毁堆栈顶端的引用。
//Push/PopLocalFrame 函数对提供了对局部引用的生命周期更方便的管理。上面 的例子中,如果处理 jstr 的过程中创建了局部引用,则 PopLocalFrame 执行时, 这些局部引用全部会被销毁。
//
//for(i = 0; i < len; i++){
// if((*env).PushLocalFrame(N_REFS) < 0){
// //out of memory
// }
// jstr = (*env).GetObjectArrayElement(arr, i);
// (*env).PopLocalFrame(NULL);
//}
//------------------------------------------------
//所以按道理应该检测是否返回值小于 0
}//
void ndk_ref_local_free(JNIEnv* env)
{
(*env)->PopLocalFrame(env, NULL); //批量释放 //避免 512 限制
}//
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.