啊豪仔 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 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程