当前位置: 首页 > 知识库问答 >
问题:

JNI错误(应用程序错误):本地引用表溢出(max=512),即使没有本机代码

戚兴思
2023-03-14

我们最近推出了我们的应用程序和升级实际上从以前的版本…

突然间,我们开始在大量的设备中看到这个错误...我们不知道发生了什么,日志也很模糊...

在这里附上日志。但任何帮助或一些线索可能会帮助我们调试问题。

修订:'10'

ABI:“ARM64”

PID:31610,TID:31610,名称:st.mediaManager>>><<<

中止消息:“sart/runtime/indirect_reference_table.cc:98]JNI错误(应用程序错误):本地引用表溢出(max=512)"

x0   0000000000000000  x1   0000000000007b7a  x2   0000000000000006  x3   0000007fa219fe30

x4   0000007fa219fe30  x5   0000000000000005  x6   0000000000000001  x7   0000000000000020

x8   0000000000000083  x9   00000000000000ca  x10  0000007fa1f2a000  x11  0000000000000001

x12  0000000000000001  x13  0000007fa1f2a000  x14  c4aa4c0daad90e20  x15  0000007f92002a31

x16  0000007fa1f2a610  x17  0000007fa1eca174  x18  0000000000000000  x19  0000007fa219fe30

x20  0000007fa21a00e8  x21  0000007fa1f30000  x22  0000000000000001  x23  0000000000000006

x24  0000007fee90e2d0  x25  0000007f9e0a6000  x26  0000007fee90e2c8  x27  0000007f9dffd520

x28  0000007f9e0a6000  x29  0000007fee90e150  x30  0000007fa1e8c264

sp   0000007fee90e150  pc   0000007fa1eca17c  pstate 0000000060000000

回溯:

#00 pc 000000000005e17c  /system/lib64/libc.so (tgkill+8)

#01 pc 0000000000020260  /system/lib64/libc.so (pthread_kill+160)

#02 pc 0000000000021794  /system/lib64/libc.so (raise+28)

#03 pc 000000000001b17c  /system/lib64/libc.so (abort+60)

#04 pc 0000000000310534  /system/lib64/libart.so (art::Runtime::Abort()+300)

#05 pc 00000000000d5378  /system/lib64/libart.so (art::LogMessage::~LogMessage()+2684)

#06 pc 00000000001e7ff0  /system/lib64/libart.so (art::IndirectReferenceTable::Add(unsigned int, art::mirror::Object*)+416)

#07 pc 00000000002e28cc  /system/lib64/libart.so (art::VMClassLoader_findLoadedClass(_JNIEnv*, _jclass*, _jobject*, _jstring*)+248)

#08 pc 000000000002a5dc  /system/framework/arm64/boot.oat

生成指纹:“Verizon/trltevzw/trltevzw:5.1.1/lmy47x/n910vvru2bpa1:user/release-keys”修订版:“12”abi:“arm”pid:481,tid:481,名称:st.mediaManager>><<<信号6(SIGABRT),代码-6(SI_TKILL),错误地址-------中止消息:“sart/runtime/indirect_reference_table.cc:109]JNI错误(应用程序错误):本地引用表溢出(max=512)"r0 00000000 r1 000001e1 r2 00000006 r3

回溯:#00 pc 00038854/System/lib/libc.so(TGKILL+12)#01 pc 00014711/System/lib/libc.so(PThread_KILL+52)#02 pc 0001532F/System/lib/libc.so(RAISE+10)#03 pc 00011bc9/System/lib/libc.so(__libc_android_abort+36)#04 pc 0001003C/System/lib/libc.so(abort+4)#05 pc 00230CD1/System/lib/libt.so(ART::runtime::abort()+160)

建立指纹:“Verizon/Zenltevzw/Zenltevzw:5.1.1/LMY47X/G928VVRU2AOJ3:用户/释放键”修订版:'9'ABI:“ARM64”PID:18658,TID:18658,名称:st.mediaManager>>><<<信号6(SIGABRT),代码-6(SI_TKILL),故障地址------中止消息:“sart/runtime/indirect_reference_table.cc:109]JNI错误(应用程序错误):本地引用表溢出(max=512)"x0 000000000000000000000048E2 x2 0000000000000000000048E2 x2 0000000000000000000006 x3 0000007FA3887E30 x4 0000007FA3887E30 x5 0000000000000000000005 x6

回溯

#00 pc 000000000005e0dc  /system/lib64/libc.so (tgkill+8)
#01 pc 0000000000020220  /system/lib64/libc.so (pthread_kill+160)
#02 pc 0000000000021754  /system/lib64/libc.so (raise+28)
#03 pc 000000000001b13c  /system/lib64/libc.so (abort+60)
#04 pc 00000000002ffca4  /system/lib64/libart.so (art::Runtime::Abort()+300)
#05 pc 00000000000d15b8  /system/lib64/libart.so (art::LogMessage::~LogMessage()+2684)
#06 pc 00000000002ad730  /system/lib64/libart.so (art::Monitor::VisitLocks(art::StackVisitor*, void (*)(art::mirror::Object*, void*), void*, bool)+952

#07 pc 0000000000314978  /system/lib64/libart.so (art::StackDumpVisitor::VisitFrame()+568)
#08 pc 000000000030ba08  /system/lib64/libart.so (art::StackVisitor::WalkStack(bool)+308)
#09 pc 0000000000313754  /system/lib64/libart.so (art::Thread::DumpJavaStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const+268)
#10 pc 0000000000313968  /system/lib64/libart.so (art::Thread::DumpStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const+272)
#11 pc 000000000031e8dc  /system/lib64/libart.so (art::ThreadList::DumpLocked(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)+100)
#12 pc 00000000002ffd34  /system/lib64/libart.so (art::Runtime::Abort()+444)
#13 pc 00000000000d15b8  /system/lib64/libart.so (art::LogMessage::~LogMessage()+2684)
#14 pc 00000000001d7468  /system/lib64/libart.so (art::IndirectReferenceTable::Add(unsigned int, art::mirror::Object*)+416)
#15 pc 00000000002d2018  /system/lib64/libart.so (art::VMClassLoader_findLoadedClass(_JNIEnv*, _jclass*, _jobject*, _jstring*)+248)
#16 pc 000000000002a5dc  /system/framework/arm64/boot.oat

构建指纹:“Verizon/KLTEVZW/KLTEVZW:5.0/LRX21T/G900VVRU2BOK3:用户/释放键”

修订:'14'

ABI:“手臂”

PID:32148,TID:32148,名称:st.mediaManager>>><<<

信号6(SIGABRT),代码-6(SI_TKILL),故障地址-------

中止消息:“art/runtime/indirect_reference_table.cc:113]JNI错误(应用程序错误):本地引用表溢出(max=512)"

r0 00000000  r1 00007d94  r2 00000006  r3 00000000

r4 b6f92114  r5 00000006  r6 00000016  r7 0000010c

r8 00000000  r9 b4e4f520  sl b4e07800  fp 000004ba

ip 00007d94  sp be8a3b38  lr b6f1bfd1  pc b6f40268  cpsr 60070010

回溯:

#00 pc 00038268  /system/lib/libc.so (tgkill+12)

#01 pc 00013fcd  /system/lib/libc.so (pthread_kill+52)

#02 pc 00014beb  /system/lib/libc.so (raise+10)

#03 pc 00011531  /system/lib/libc.so (__libc_android_abort+36)

#04 pc 0000fcbc  /system/lib/libc.so (abort+4)

#05 pc 0021d5d9  /system/lib/libart.so (art::Runtime::Abort()+160)

#06 pc 000a834b  /system/lib/libart.so (art::LogMessage::~LogMessage()+1322)

#07 pc 001574b7  /system/lib/libart.so (art::IndirectReferenceTable::Add(unsigned int, art::mirror::Object*)+346)

#08 pc 002010d5  /system/lib/libart.so (art::VMClassLoader_findLoadedClass(_JNIEnv*, _jclass*, _jobject*, _jstring*)+136)


#09 pc 0001b151  /system/framework/arm/boot.oat

共有1个答案

鲁辉
2023-03-14

我没有一个完整的答案,但它太长的评论,所以我将它作为一个。

因此,错误正如您所预料的那样--它是对本机代码的调用,导致与本机共享的对象超过512个。通常是因为某处漏水。而且您不需要直接使用本机代码来实现它--框架在幕后进行了大量的本机调用。

从堆栈跟踪-我看到它的libart.so,而不是libdalvik.so。这发生在从Dalvik VM切换到ART的新设备上。堆栈跟踪看起来像是试图加载一个类,并为一些JNI代码添加一个对它的引用,但我不能确定这一点。我知道我们已经看到类加载错误在艺术工作上是不存在的Dalvik。

如果您有任何本机代码,我会确保您正确释放了对java内存和类的所有引用。如果你没有--这可能是Art中的一个bug,知道崩溃时应用程序在做什么会很有用。坠机事件是否一致?如果是,你在做什么?

 类似资料:
  • 问题内容: 我的功能如下所示。它执行了很多次。在某些时候,它在jobject nvarObject = env-> GetObjectField(var1,nvar1)时崩溃,给出错误JNI错误:本地引用表溢出512个条目。 任何人都可以调查这个问题并提出一些建议。 问题答案: 所有返回一个或类似对象引用的JNI方法都在引用表中创建本地引用。当您将控制权返回给JVM时,这些引用会自动清除,但是如果

  • 问题内容: TL; DR: 将任何非内置函数添加到Array.prototype AND Function.prototype将导致IE8本机JSON解析器在解析包含数组的任何JSON时发生堆栈溢出,但仅当您还传递了reviver函数时放入JSON.parse()。 最初这是一个问题,但我回答了我自己的原始问题,所以现在我要问:有人能想到此IE8错误的解决方法,该方法不涉及消除所有修改Array.

  • 我对这个新的Facebook界面感到非常困惑,它的沙盒按钮在运行中丢失了。 在开发一个应用程序的中间,所以我在沙箱模式-你想让这个应用程序和它的所有现场功能可供大众使用吗?设置为否(我只是在开发) 我以应用程序管理员的身份登录到我的iOS设备facebook帐户,我已经正确设置了iOS和bundle ID,正确设置了FBID,但每次尝试从设备登录facebook时,我都会。。。 “应用程序未设置:

  • 我不明白这是什么意思,也不明白为什么只有有时候才会发生。如有任何帮助,我们将不胜感激。很乐意分享更多细节。 我们已经能够在Android7.0设备上重现这次崩溃。但并不一致。

  • 在android中,我使用pthread_create来创建一个本地线程,然后在回调过程中,调用FindClass来获取一个Java类。但是它不起作用。我从android jni提示中获得提示,我从Android JNI中的任何线程中找到了FindClass中的解决方案 我为我的项目修改它,如下[编辑] 程序在env退出- 如果我删除

  • 我试图使用javamail示例包中的ShowMsg.java读取gmail消息,但在运行时不断出现此错误。虽然程序编译得很好。 以下是错误消息: 我运行的命令是,编译它的命令是。javax.mail.jar包含在lib文件夹中 这是一些更短的替代代码,并得到相同的错误: