最近遇到一个问题,晚上找了很久没有找到解决方法,最后自己琢磨解决了,特拿出来和大家分享,以免有人遇到同样的问题。
我的这个错误是这样产生的。我的程序大量使用java的jni功能,并在某些时候会频繁的java和C相互调用,这样在程序运行一段时间后就出现了题目中所说到的内容ReferenceTable overflow (max=512)。
从字面上我对这个错误的理解是这样的:java的垃圾处理里面有个叫引用计数的东东,我这里看到的错误貌似就是在说这个问题,引用计数表溢出?
于是我找了自己的代码,不停的屏蔽,发现错误竟然出现在c中调用java时候的这样一句话里
jc = (*ev)->GetObjectClass(m_obj);
其中jc是javaclass的变量,难道是这句话有泄漏导致java的引用计数不停增加?又或者是这句话影响到了别的什么东西?
于是开始google,结果发现人家调用GetObjectClass的时候都调用啥子释放的东东啊,难道那个jc需要释放?????
自己找了n久发现在不用jc的时候调用m_env->DeleteLocalRef(jc); 问题便解决了,嘎嘎
*********************************************************************************************
以上是一个网友的解决方法。
下面是我的方法:
/**
* 加载录音片段的数据(30毫秒的录音片段)
*/
JNIEXPORT jint Java_com_mir_ksong_jni_Jni_loadRecorderBuffer
(JNIEnv *env, jobject thiz, jshortArray shortBuffer){
jRecorderBuffer = (env)->GetShortArrayElements(shortBuffer, 0 );
Eighth_Tone pitch;
short pitch_in_Hz;
int score;
//加载录音数据
IVocalPitch_Model_Get(modle,&pitch_in_Hz,&pitch,score);
//释放空间
(env)->ReleaseShortArrayElements( shortBuffer, jRecorderBuffer, 0);
return pitch_in_Hz;
}
说白了就是释放空间。
分享到:
相关推荐
android ndk 使用方法android ndk 使用方法
Android NDK 安装以及 HelloWorld!测试
NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk,并集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件
博客名称 : 【Android NDK 开发】在 C 代码中获取 Android 系统信息 ( NDK 项目创建 | NDK 配置 | 获取 Android 系统版本号 ) 博客地址 : https://hanshuliang.blog.csdn.net/article/details/102933704
Android NDK 开发时需要的 常用的JNI API
这个虽然只是个简单的jnidemo、但是涵盖了Android.mk 和Application.mk 的原理 重点是Android NDK编译的理解 mac 系统下 切换到jni目录,然后呢个 ndk-build
使用Android NDK编译Android平台的eXosip库,有静态库和动态库。
android ndk详细介绍
android-ndk(android-ndk-r26b-windows.zip)适用于Windows系统
android-ndk(android-ndk-r25b-linux.zip)适用于Linux系统
ndk网盘下载,方便不能科学上网的同学下载。包含Windows和Mac版本。版本号r14-r20,全部下载搬运自谷歌Android官网。下载后是一个文本文件,用文本编辑器打开即可看到网盘下载地址。
valgrind for android NDK, 由国外相关资源整理,并亲测试可用,只支持 arm 架构.
Eclipse集成Android NDK说明 1 2 为什么要用NDK? 2 3 为什么要集成? 2 4 怎样操作? 2 4.1 预备条件 2 4.1.1 Cygwin 2 4.1.2 Eclipse 2 4.1.3 Eclipse CDT 3 4.1.4 Android SDK 3 4.1.5 Android NDK 3 ...
文档里描述了移植libiconv方法,并附有源码,经过验证ok
Android NDK 开发教程 三 Hello JNI 示例
该资源包含了一个用android实现的androidndk文档,简单易懂!
Android SDK NDK API 对应关系
android NDK基本操作步骤说明 NDK入门教程。
android ndk android ndk android ndk android ndk android ndk android ndk
下载 https://developer.android.google.cn/ndk/downloads/ https://developer.android.google.cn/ndk/downloads/older_releases 编译ffmpeg:最高版本16b,再高的版本...export NDK=/home/quantum6/android-ndk-16b