啊豪仔 2022-04-27 14:23 采纳率: 42.9%
浏览 255
已结题

JNI ERROR (app bug): global reference table overflow (max=51200)

问题遇到的现象和发生背景

Android项目中包含JNI,运行时间长的话会报错:JNI ERROR (app bug): global reference table overflow (max=51200)
然后程序崩溃,请问各位这个应该怎么解决呢?

问题相关代码,请勿粘贴截图

#ifdef ANDROID
jobject NativeByteBuffer::getJavaByteBuffer() {
if (javaByteBuffer == nullptr && javaVm != nullptr) {
JNIEnv *env = 0;
if (javaVm->GetEnv((void **) &env, JNI_VERSION_1_6) != JNI_OK) {
if (LOGS_ENABLED) DEBUG_E("can't get jnienv");
exit(1);
}
javaByteBuffer = env->NewDirectByteBuffer(buffer, _capacity);
if (javaByteBuffer == nullptr) {
if (LOGS_ENABLED) DEBUG_E("can't allocate NativeByteBuffer buffer");
exit(1);
}
jobject globalRef = env->NewGlobalRef(javaByteBuffer);
env->DeleteLocalRef(javaByteBuffer);
javaByteBuffer = globalRef;
}
return javaByteBuffer;
}

运行结果及报错内容

04-27 13:09:01.659 2924 3052 F art : art/runtime/indirect_reference_table.cc:209] JNI ERROR (app bug): global reference table overflow (max=51200)
04-27 13:09:01.659 2924 3052 F art : art/runtime/indirect_reference_table.cc:209] global reference table dump:
04-27 13:09:01.659 2924 3052 F art : art/runtime/indirect_reference_table.cc:209] Last 10 entries (of 51200):
04-27 13:09:01.659 2924 3052 F art : art/runtime/indirect_reference_table.cc:209] 51199: 0x1654de40 java.nio.DirectByteBuffer
04-27 13:09:01.659 2924 3052 F art : art/runtime/indirect_reference_table.cc:209] 51198: 0x1654de00 java.nio.DirectByteBuffer
04-27 13:09:01.659 2924 3052 F art : art/runtime/indirect_reference_table.cc:209] 51197: 0x1654dc40 java.nio.DirectByteBuffer
04-27 13:09:01.659 2924 3052 F art : art/runtime/indirect_reference_table.cc:209] 51196: 0x1654db80 java.nio.DirectByteBuffer
04-27 13:09:01.659 2924 3052 F art : art/runtime/indirect_reference_table.cc:209] 51195: 0x16097d60 org.telegram.tgnet.ConnectionsManager$$ExternalSyntheticLambda13
04-27 13:09:01.659 2924 3052 F art : art/runtime/indirect_reference_table.cc:209] 51194: 0x1654d880 java.nio.DirectByteBuffer
04-27 13:09:01.659 2924 3052 F art : art/runtime/indirect_reference_table.cc:209] 51193: 0x1654d840 java.nio.DirectByteBuffer
04-27 13:09:01.659 2924 3052 F art : art/runtime/indirect_reference_table.cc:209] 51192: 0x1654d700 java.nio.DirectByteBuffer
04-27 13:09:01.659 2924 3052 F art : art/runtime/indirect_reference_table.cc:209] 51191: 0x1654d6c0 java.nio.DirectByteBuffer
04-27 13:09:01.659 2924 3052 F art : art/runtime/indirect_reference_table.cc:209] 51190: 0x1654d580 java.nio.DirectByteBuffer

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

1条回答 默认 最新

  • 不会写代码的猴子 Android领域优质创作者 2022-04-28 09:48
    关注

    javaByteBuffer = env->NewDirectByteBuffer(buffer, _capacity);
    是不是这里的buffer没有释放导致的内存溢出?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月1日
  • 已采纳回答 5月24日
  • 创建了问题 4月27日

悬赏问题

  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿