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 手动释放内存(避免内存泄露)相关推荐

  1. 手动释放linux服务器内存

    转自 :http://blog.sina.com.cn/s/blog_4bb52a1601017ltn.html 这位朋友写的很详细 fengwei@linuxserver ~]$ free -m t ...

  2. Linux释放内存及手动释放Oracle共享内存段

    free -m #echo 3 > /proc/sys/vm/drop_caches#cat /proc/sys/vm/drop_caches3 free -m 手动删除Oracle共享内存段 ...

  3. linux清缓存命令多节点,Liunx手动释放buffers/cache内存_linux,缓存,

    最近自己开发上的一台服务器,部署了太多服务,导致了一个内存不够用的情况,在通过free命令的查看下发现cache缓存占用到了快将近700M左右,导致我不得不去释放内存. 在释放内存前我们使用sync命 ...

  4. Liunx手动释放buffers/cache内存

    最近自己开发上的一台服务器,部署了太多服务,导致了一个内存不够用的情况,在通过free命令的查看下发现cache缓存占用到了快将近700M左右,导致我不得不去释放内存. 对free命令不熟悉的请点击跳 ...

  5. python手动回收内存哪家好_谈谈如何手动释放Python的内存

    在上篇博客中,提到了对一个脚本进行的多次优化.当时以为已经优化得差不多了,但是当测试人员测试时,我才发现,踩到了Python的一个大坑. 在上文的优化中,对每500个用户,会进行一些计算并记录结果在磁 ...

  6. linux内存cached手动释放

    总有很多朋友对于Linux的内存管理有疑问,之前一篇linux下的内存管理方式似乎也没能清除大家的疑虑.而在新版核心中,似乎对这个问题提供了新的解决方法,特转出来给大家参考一下.最后,还附上我对这方法 ...

  7. JNI内存方面说明以及相关类型手动释放内存

    JNI内存方面说明以及相关类型手动释放内存 一.Java内存 二.JNI内存和引用 三.Local Reference 四.Global Reference 五.Weak Global Referen ...

  8. linux手动释放内存的方法

    Linux手动释放缓存的方法 Linux释放内存的命令: sync echo 1 > /proc/sys/vm/drop_caches drop_caches的值可以是0-3之间的数字,代表不同 ...

  9. 如何手动释放Linux内存的方法

    当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题 ...

  10. linux 手动释放内存

    当在Linux下 频繁存取文件 或者 程序测试频繁崩溃后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching 因此我们很有必要手动清理系统缓存释放内存. 我们在清理缓存 ...

最新文章

  1. C++标准库简介(转)
  2. apache laravel主页500_PS强大笔刷,插画师完美Hold住各种效果!(附500个笔刷)
  3. Apache ZooKeeper - Watch 机制的底层原理
  4. linux 磁盘延时,Linux:如何模拟硬盘延迟?我想在不使用CPU电源的情况下增加iowait值...
  5. HDU - 5187 zhx's contest(快速幂+快速加+组合数学)
  6. php怎么调试小程序,教你如何配置微信小程序
  7. 什么叫做罗列式_极简罗列法怎么写作文
  8. o型圈沟槽设计软件_265 电机壳体上轴承室和轴承外圈增加的O型圈工艺对轴承外圈(防蠕动)作用有多大?...
  9. 基于python的空域变换
  10. 移动端自适应布局方案尝试
  11. sap系统搭建教程_SAP系统和微信集成的系列教程之一:微信开发环境的搭建
  12. 怎样清理计算机c盘东西,怎样清理电脑c盘无用的东西(电脑c盘垃圾清理技巧)...
  13. ubuntu安装企业微信
  14. module_param传递参数
  15. 存储过程,使用游标,详细过程及详解
  16. csp试题2:二十四点
  17. CSS的px和em的区别
  18. python 生成随机邮箱
  19. 随机过程–Metropolis-Hastings算法
  20. Arduino 项目笔记|旋转鞋柜#按钮去抖Debounce#电机#压力传感器

热门文章

  1. 北汽极狐ARCFOX与华为合作
  2. QQHelper:QQ大家来找茬 辅助工具 外挂
  3. swift声明属性为某个类型同时遵循某协议
  4. 基本HTML标签语法整理
  5. eCognition软件中ESP2插件的下载与安装
  6. CentOS安装sox音频处理器
  7. AdxMenu真的不错!我写了个中文的使用说明如下,希望大家用得着
  8. C#替换Word中的文本内容
  9. 问题解决:Ubuntu18.04显示器分辨率不正常
  10. 如何在Chrome(或任何浏览器)中编辑任何网页