local reference table overflow
JNI层coding经常会遇到ReferenceTable overflow问题,特别是当jni函数被反复调用上千上万次的时候,现汇总如下,未完待续,并欢迎补充,(*^__^*) 嘻嘻……
总体原则:释放所有对object的引用
1.FindClass 
例如,
jclass ref= (env)->FindClass("java/lang/String");
env->DeleteLocalRef(ref); 
2.NewString/ NewStringUTF/NewObject/NewByteArray
例如,
jstring     (*NewString)(JNIEnv*, const jchar*, jsize);    
const jchar* (*GetStringChars)(JNIEnv*, jstring, jboolean*);     
void        (*ReleaseStringChars)(JNIEnv*, jstring, const jchar*);
jstring     (*NewStringUTF)(JNIEnv*, const char*);    
const char* (*GetStringUTFChars)(JNIEnv*, jstring, jboolean*);     
void        (*ReleaseStringUTFChars)(JNIEnv*, jstring, const char*);
env->DeleteLocalRef(ref);
3.GetObjectField/GetObjectClass/GetObjectArrayElement
jclass ref = env->GetObjectClass(robj);
env->DeleteLocalRef(ref); 
4.GetByteArrayElements
jbyte* array= (*env)->GetByteArrayElements(env,jarray,&isCopy);
(*env)->ReleaseByteArrayElements(env,jarray,array,0);
4.const char* input =(*env)->GetStringUTFChars(env,jinput, &isCopy);
(*env)->ReleaseStringUTFChars(env,jinput,input);
5.NewGlobalRef/DeleteGlobalRef
jobject     (*NewGlobalRef)(JNIEnv*, jobject); 
void        (*DeleteGlobalRef)(JNIEnv*, jobject);
例如,
jobject ref= env->NewGlobalRef(customObj);
env->DeleteGlobalRef(customObj);

local reference table overflow 内存泄露相关推荐

  1. 【泄漏类】android7.0 system_server发生global reference table overflow问题分析

    1.问题描述 旋转屏测试5-6小时system_server发生abort,手机重启导致测试停止,android7.0平台多个项目都有此问题爆出. 和测试同事了解旋转屏幕在settings界面进行操作 ...

  2. JNI Local Reference Changes in ICS

    转:http://android-developers.blogspot.com/2011/11/jni-local-reference-changes-in-ics.html JNI Local R ...

  3. 内存溢出(Memory Overflow)和内存泄露(Memory Leak)的区别

    内存泄漏指你用malloc或new申请了一块内存,但是没有通过free或delete将内存释放,导致这块内存一直处于占用状态 内存溢出指你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数 ...

  4. 使用ThreadLocal不当可能会导致内存泄露

    使用ThreadLocal不当可能会导致内存泄露 基础篇已经讲解了ThreadLocal的原理,本节着重来讲解下使用ThreadLocal会导致内存泄露的原因,并讲解使用ThreadLocal导致内存 ...

  5. 关于Neighbour table overflow消息

    关于Neighbour table overflow消息 最近Linux服务器的屏幕上会一直出现「Neighbour table overflow」的信息,并且就连不上INTERNET了.这个问题已经 ...

  6. Java内存泄露的理解与解决

    Java内存管理机制 在C++语言中,如果需要动态分配一块内存,程序员需要负责这块内存的整个生命周期.从申请分配.到使用.再到最后的释放.这样的过程非常灵活,但是却十分繁琐,程序员很容易由于疏忽而忘记 ...

  7. LeakCanary——消除Android中的内存泄露

    2019独角兽企业重金招聘Python工程师标准>>> ##LeakCanary ####简介 LeakCanary是Square公司最近公布的开源项目,旨在消除Android中的内 ...

  8. 加载文件流_未关闭的文件流会引起内存泄露么?

    专注于Java领域优质技术,欢迎关注 来自:技术小黑屋 最近接触了一些面试者,在面试过程中有涉及到内存泄露的问题,其中有不少人回答说,如果文件打开后,没有关闭会导致内存泄露.当被继续追问,为什么会导致 ...

  9. inputstreamreader未关闭会导致oom_ThreadLocal 一定会导致内存泄露?

    在面试的时候,ThreadLocal作为高并发常用工具经常会被问到.而面试官比较喜欢问的问题有以下两个: 1.ThreadLocal是怎么实现来保证每个线程的变量副本的. 2.ThreadLocal的 ...

最新文章

  1. JSP WEB开发入门基础到高手进阶教程002
  2. webpack - 收藏集 - 掘金
  3. [树套树] 网络管理
  4. gcc编译器的整个工作过程
  5. 最长上升子序列nlogn算法
  6. 领英“顶尖公司”榜单出炉:华为、字节跳动位居前二
  7. 【转】二叉树、B树、B-树、B+树、B*树
  8. php支付问题,如何解决php支付错误的问题
  9. xcode 4.2 开发2——TabelView
  10. 非线性光纤光学_片上光学频率梳:可产生光子微波,应用于卫星通信和5G网络!...
  11. 立秋后注意脚部保暖 试试量身定制合脚鞋
  12. 硬核!4.5万字手把手教你搭建MySQL海量数据存储架构!!(全程实战,建议收藏)
  13. 直播:全能项目经理 - 设计篇(2015-2-16)
  14. 网页连接opc服务器,远程连接opc服务器
  15. 简单计算器(Java实训)
  16. 【高效办公】OS模块对文件夹所有文件重命名
  17. Oracle 、SQL多字段分组统计
  18. loadrunner入门教程(14)--检查点
  19. 店盈通:拼多多一个店铺推几个产品最好
  20. Python调用大漠插件(一)

热门文章

  1. NeHe教程Qt实现——lesson03
  2. c语言单片机求最小公倍数,单片机常用的14个C语言算法,要熟记在心哦!
  3. kafka教程_2018年机器学习趋势与Apache Kafka生态系统结合
  4. idea配置jfinal_intellij idea安装与配置(Java开发配置篇)
  5. android开发字体样式,Android开发中修改程序字体的样式
  6. mixin network_基于Mixin Network的Ruby比特币开发教程
  7. 几种常见的JVM调优场景(建议收藏)
  8. Spring Boot 2.6之后,动态权限控制终于可以用起来了!
  9. AWS回应Elastic修改开源协议:创建“真正”开源的Elasticsearch分支
  10. 你一定需要知道的高阶JAVA枚举特性!