登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> CLQ工作室开源代码 >> 主题: [android] ndk 中还是不要用批量释放局部引用的函数对的好,一个个手工释放更安全     [回主站]     [分站链接]
标题
[android] ndk 中还是不要用批量释放局部引用的函数对的好,一个个手工释放更安全
clq
浏览(536) + 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 限制
}//


总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1