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
分类:
android提高篇
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2016-03-28 通过layout实现可拖拽自动排序的UICollectionView
2016-03-28 Swift2.0下UICollectionViews拖拽效果的实现
2016-03-28 Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍
2016-03-28 Swift基础--手势识别(双击、捏、旋转、拖动、划动、长按)
2015-03-28 java实现 阿拉伯数字转换为汉字数字 算法
2015-03-28 Android TextView 实现文字大小不同和文字颜色不同
2015-03-28 解决Android中TextView首行缩进的问题