最近遇到一个问题,晚上找了很久没有找到解决方法,最后自己琢磨解决了,特拿出来和大家分享,以免有人遇到同样的问题。
我的这个错误是这样产生的。我的程序大量使用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 libiconv库移植方法.pdf`文档应该提供了更详细的移植步骤和注意事项,包括如何处理特定平台的依赖、编译选项的调整以及可能出现的问题及解决方案。在实际操作过程中,可能还需要根据Android版本和目标...
Android NDK环境配置是Android应用开发中的一个重要环节,它允许开发者使用C或C++编写高性能的原生代码,这些代码可以被编译成动态库并与Java应用一同打包成APK。NDK集成了交叉编译器,使得开发者能够针对不同的CPU...
Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的C和C++开发工具集。这个压缩包“android-ndk-r25b-windows.zip”包含了NDK的第25个版本,专为Windows操作系统设计。NDK的主要功能...
Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的C和C++库开发工具集。这个“android-ndk-r23b-linux.zip”文件是NDK的一个特定版本,即r23b,专为Linux操作系统设计。在Android...
Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的C和C++库开发工具集。这个“android-ndk-r25b-linux.zip”文件是NDK的一个特定版本,即r25b,专为Linux操作系统设计。在Android...
Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的C/C++开发工具集。这个"android-ndk-r23b-windows.zip"压缩包包含了NDK的第23个版本,专为Windows操作系统设计。NDK是Android应用...
Android NDK 开发环境的搭建 Android NDK 是 Android 官方提供的一款开发工具,允许开发者使用 C 和 C++ 语言编写 Android 应用程序。下面将详细介绍 Android NDK 的安装和配置过程。 一、下载安装 Android NDK ...
在Ubuntu系统上搭建Android NDK编译环境是Android原生代码开发的重要步骤,适用于那些需要进行C/C++底层开发或优化的应用程序。Android NDK(Native Development Kit)是一套工具,允许开发者使用C/C++编写部分应用...
Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的C和C++开发工具集。这个压缩包“android-ndk-r26b-windows.zip”包含了NDK的第26个版本,专为Windows操作系统设计。通过这个工具,...
“【eoe+Android特刊】第十九期:Android自定义控件.pdf”虽然不是直接关于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
Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的C和C++原生代码开发工具。NDK允许开发者在Android应用中使用原生代码,以实现高性能、低级别的硬件交互以及利用已有的C/C++库。在...
本文将深入探讨如何使用Android NDK(Native Development Kit)来编译适用于Android平台的eXosip库,包括静态库和动态库的构建过程。 首先,eXosip是基于OSI(Open Systems Interconnection)模型的SIP协议栈,它是...
**关于Android NDK:** NDK是Google提供的一个工具集,允许开发者在Android平台上使用C和C++编写原生代码。NDK的主要用途是提高性能、处理底层硬件交互以及利用已有的C/C++库,比如Live555。通过JNI(Java Native ...
Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的C和C++库开发工具集。这个工具允许开发者在Android应用中使用原生代码,以实现高性能计算、图形处理、游戏引擎等复杂功能。`...
### 非常强大的Eclipse中Android NDK开发环境的配置说明 #### 一、概述 本文档将详细介绍如何在Eclipse中配置Android NDK开发环境,并实现C/C++代码的自动编译以及通过Eclipse使用Ant生成JNI所需的头文件。配置流程...
Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的开发工具,它允许开发者使用C++和其他原生编程语言编写应用的部分或全部代码。这个“android-ndk-r26b-linux.zip”文件是NDK的一个...
### Android NDK 使用详解 #### 一、前言 Android NDK(Native Development Kit)是Android SDK的一个子组件,主要用于支持开发者使用C/C++语言进行原生应用开发。通过使用NDK,开发者能够利用高性能的原生代码来...
在"android-sdk-NDK17.2.4988734.txt"这个文件中,可能会包含关于该版本NDK的详细信息,如发行说明、API变更、已知问题以及解决方法等。通过阅读这份文档,开发者可以了解如何安装和配置NDK,以及如何在项目中有效...
Android NDK(Native Development Kit)是Google为Android平台提供的一款用于开发原生代码的应用工具,它允许开发者使用C和C++编写部分应用代码,以利用设备的硬件性能或实现更底层的操作。在“android-ndk-r8dab....