JNI手动释放内存(避免内存泄露)
来源:互联网 发布:网络棋牌信息 编辑:程序博客网 时间:2024/06/05 23:45
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
阅读全文
0 0
- JNI手动释放内存(避免内存泄露)
- 数据库mysql结果集没有手动释放造成内存泄露
- 一个需要手动释放引用,避免内存溢出的例子
- JNI内存释放以及泄露处理方法汇总
- vector 避免内存频繁分配释放与手动释放vector内存
- vector 避免内存频繁分配释放与手动释放vector内存
- vector 避免内存频繁分配释放与手动释放vector内存
- vector 避免内存频繁分配释放与手动释放vector内存
- eclipse 手动释放内存
- LINUX手动释放内存
- 手动释放ubuntu内存
- php手动释放内存
- CentOS7手动释放内存
- 手动释放Linux内存
- php手动释放内存
- JNI使用注意与避免内存泄露总结
- 避免浏览器内存泄露
- 避免内存泄露
- 使用IDEA创建JavaWeb项目
- DOM中的事件
- Android N 的开机启动流程概述
- HashMap的工作原理
- Koa2-下载-文件流
- JNI手动释放内存(避免内存泄露)
- JIT编译器里面的“逃逸分析”(Escape analysis)
- POJ 1617
- 前端的小玩意(16)——利用setter和getter实现数据校验
- STL VECTOR方法
- Windows下使用CMD命令复制多层级目录
- python 多线程 实现端口扫描
- JavaWeb三大技术之Filter
- Python学习笔记 5