`

关于android ndk出现ReferenceTable overflow (max=1024)的解决方法

阅读更多

最近遇到一个问题,晚上找了很久没有找到解决方法,最后自己琢磨解决了,特拿出来和大家分享,以免有人遇到同样的问题。

       我的这个错误是这样产生的。我的程序大量使用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方法 附源码

    `android ndk libiconv库移植方法.pdf`文档应该提供了更详细的移植步骤和注意事项,包括如何处理特定平台的依赖、编译选项的调整以及可能出现的问题及解决方案。在实际操作过程中,可能还需要根据Android版本和目标...

    Android NDK环境配置

    Android NDK环境配置是Android应用开发中的一个重要环节,它允许开发者使用C或C++编写高性能的原生代码,这些代码可以被编译成动态库并与Java应用一同打包成APK。NDK集成了交叉编译器,使得开发者能够针对不同的CPU...

    android-ndk(android-ndk-r25b-windows.zip)

    Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的C和C++开发工具集。这个压缩包“android-ndk-r25b-windows.zip”包含了NDK的第25个版本,专为Windows操作系统设计。NDK的主要功能...

    android-ndk(android-ndk-r23b-linux.zip)

    Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的C和C++库开发工具集。这个“android-ndk-r23b-linux.zip”文件是NDK的一个特定版本,即r23b,专为Linux操作系统设计。在Android...

    android-ndk(android-ndk-r23b-windows.zip)

    Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的C/C++开发工具集。这个"android-ndk-r23b-windows.zip"压缩包包含了NDK的第23个版本,专为Windows操作系统设计。NDK是Android应用...

    android-ndk(android-ndk-r25b-linux.zip)

    Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的C和C++库开发工具集。这个“android-ndk-r25b-linux.zip”文件是NDK的一个特定版本,即r25b,专为Linux操作系统设计。在Android...

    ubuntu下android ndk编译环境搭建详细描述

    在Ubuntu系统上搭建Android NDK编译环境是Android原生代码开发的重要步骤,适用于那些需要进行C/C++底层开发或优化的应用程序。Android NDK(Native Development Kit)是一套工具,允许开发者使用C/C++编写部分应用...

    androidndk开发实战

    “【eoe+Android特刊】第十九期:Android自定义控件.pdf”虽然不是直接关于NDK,但它提供了关于Android自定义控件的信息。在某些情况下,使用NDK可以提高自定义控件的性能,例如当需要进行复杂的图形绘制或物理模拟...

    LINUX下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(android-ndk-r26b-darwin.zip)

    Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的C和C++原生代码开发工具。NDK允许开发者在Android应用中使用原生代码,以实现高性能、低级别的硬件交互以及利用已有的C/C++库。在...

    android-ndk(android-ndk-r26b-windows.zip)

    Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的C和C++开发工具集。这个压缩包“android-ndk-r26b-windows.zip”包含了NDK的第26个版本,专为Windows操作系统设计。通过这个工具,...

    android-ndk(android-ndk-r25b-darwin.zip)

    Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的C和C++库开发工具集。这个工具允许开发者在Android应用中使用原生代码,以实现高性能计算、图形处理、游戏引擎等复杂功能。`...

    非常强大的eclipse中android ndk开发环境的配置说明

    ### 非常强大的Eclipse中Android NDK开发环境的配置说明 #### 一、概述 本文档将详细介绍如何在Eclipse中配置Android NDK开发环境,并实现C/C++代码的自动编译以及通过Eclipse使用Ant生成JNI所需的头文件。配置流程...

    android-ndk(android-ndk-r26b-linux.zip)

    Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的开发工具,它允许开发者使用C++和其他原生编程语言编写应用的部分或全部代码。这个“android-ndk-r26b-linux.zip”文件是NDK的一个...

    android-ndk-r8dab.zip_NDK_android_android ndk

    Android NDK(Native Development Kit)是Google为Android平台提供的一款用于开发原生代码的应用工具,它允许开发者使用C和C++编写部分应用代码,以利用设备的硬件性能或实现更底层的操作。在“android-ndk-r8dab....

    android ndk下编译的live555源码(新版)

    **关于Android NDK:** NDK是Google提供的一个工具集,允许开发者在Android平台上使用C和C++编写原生代码。NDK的主要用途是提高性能、处理底层硬件交互以及利用已有的C/C++库,比如Live555。通过JNI(Java Native ...

    Android NDK 开发教程二

    本文将详细介绍 Android NDK 的使用方法、注意事项以及其局限性。 #### 二、Android NDK 基础概念 ##### 2.1 Android NDK 介绍 Android NDK 是一套工具集合,它可以让开发者在 Android 平台上使用 C 和 C++ 编写...

    android-ndk-r19c-linux-x86_64.zip

    《在Ubuntu 18.04上使用QT5.13构建基于Android NDK r19c的开发环境》 Android Native Development Kit (NDK) 是Google提供的一款工具集,用于在Android平台上进行原生代码(如C/C++)的开发。NDK r19c是其中的一个...

Global site tag (gtag.js) - Google Analytics