JNI 手动释放内存(避免内存泄露)
1. 哪些需要手动释放?
不要手动释放(基本类型): jint , jlong , jchar
需要手动释放(引用类型,数组家族): jstring,jobject ,jobjectArray,jintArray ,jclass ,jmethodID
2. 释放方法
2.1 jstring & char *
// 创建 jstring 和 char*jstring jstr = (*jniEnv)->CallObjectMethod(jniEnv, mPerson, getName);char* cstr = (char*) (*jniEnv)->GetStringUTFChars(jniEnv,jstr, 0);// 释放(*jniEnv)->ReleaseStringUTFChars(jniEnv, jstr, cstr);(*jniEnv)->DeleteLocalRef(jniEnv, jstr);
2.2 jobject,jobjectArray,jclass ,jmethodID等引用类型
(*jniEnv)->DeleteLocalRef(jniEnv, XXX);
2.3 jbyteArray
jbyteArray audioArray = jnienv->NewByteArray(frameSize);jnienv->DeleteLocalRef(audioArray);
2.4 GetByteArrayElements
jbyte* array= (*env)->GetByteArrayElements(env,jarray,&isCopy);(*env)->ReleaseByteArrayElements(env,jarray,array,0);
2.5 NewGlobalRef
jobject ref= env->NewGlobalRef(customObj);env->DeleteGlobalRef(customObj);
3. 避免内存泄露
JNI如果创建以上引用却不手动释放的话很容易就造成内存泄露,所以JNI编程创建的引用类型一定要手动释放(切身教训),检测内存泄露可以使用Jprofiler
JNI 手动释放内存(避免内存泄露)相关推荐
- 手动释放linux服务器内存
转自 :http://blog.sina.com.cn/s/blog_4bb52a1601017ltn.html 这位朋友写的很详细 fengwei@linuxserver ~]$ free -m t ...
- Linux释放内存及手动释放Oracle共享内存段
free -m #echo 3 > /proc/sys/vm/drop_caches#cat /proc/sys/vm/drop_caches3 free -m 手动删除Oracle共享内存段 ...
- linux清缓存命令多节点,Liunx手动释放buffers/cache内存_linux,缓存,
最近自己开发上的一台服务器,部署了太多服务,导致了一个内存不够用的情况,在通过free命令的查看下发现cache缓存占用到了快将近700M左右,导致我不得不去释放内存. 在释放内存前我们使用sync命 ...
- Liunx手动释放buffers/cache内存
最近自己开发上的一台服务器,部署了太多服务,导致了一个内存不够用的情况,在通过free命令的查看下发现cache缓存占用到了快将近700M左右,导致我不得不去释放内存. 对free命令不熟悉的请点击跳 ...
- python手动回收内存哪家好_谈谈如何手动释放Python的内存
在上篇博客中,提到了对一个脚本进行的多次优化.当时以为已经优化得差不多了,但是当测试人员测试时,我才发现,踩到了Python的一个大坑. 在上文的优化中,对每500个用户,会进行一些计算并记录结果在磁 ...
- linux内存cached手动释放
总有很多朋友对于Linux的内存管理有疑问,之前一篇linux下的内存管理方式似乎也没能清除大家的疑虑.而在新版核心中,似乎对这个问题提供了新的解决方法,特转出来给大家参考一下.最后,还附上我对这方法 ...
- JNI内存方面说明以及相关类型手动释放内存
JNI内存方面说明以及相关类型手动释放内存 一.Java内存 二.JNI内存和引用 三.Local Reference 四.Global Reference 五.Weak Global Referen ...
- linux手动释放内存的方法
Linux手动释放缓存的方法 Linux释放内存的命令: sync echo 1 > /proc/sys/vm/drop_caches drop_caches的值可以是0-3之间的数字,代表不同 ...
- 如何手动释放Linux内存的方法
当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题 ...
- linux 手动释放内存
当在Linux下 频繁存取文件 或者 程序测试频繁崩溃后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching 因此我们很有必要手动清理系统缓存释放内存. 我们在清理缓存 ...
最新文章
- C++标准库简介(转)
- apache laravel主页500_PS强大笔刷,插画师完美Hold住各种效果!(附500个笔刷)
- Apache ZooKeeper - Watch 机制的底层原理
- linux 磁盘延时,Linux:如何模拟硬盘延迟?我想在不使用CPU电源的情况下增加iowait值...
- HDU - 5187 zhx's contest(快速幂+快速加+组合数学)
- php怎么调试小程序,教你如何配置微信小程序
- 什么叫做罗列式_极简罗列法怎么写作文
- o型圈沟槽设计软件_265 电机壳体上轴承室和轴承外圈增加的O型圈工艺对轴承外圈(防蠕动)作用有多大?...
- 基于python的空域变换
- 移动端自适应布局方案尝试
- sap系统搭建教程_SAP系统和微信集成的系列教程之一:微信开发环境的搭建
- 怎样清理计算机c盘东西,怎样清理电脑c盘无用的东西(电脑c盘垃圾清理技巧)...
- ubuntu安装企业微信
- module_param传递参数
- 存储过程,使用游标,详细过程及详解
- csp试题2:二十四点
- CSS的px和em的区别
- python 生成随机邮箱
- 随机过程–Metropolis-Hastings算法
- Arduino 项目笔记|旋转鞋柜#按钮去抖Debounce#电机#压力传感器