再见了【JNI global reference table overflow】

在一年前的blog中,我们提到了由于JNI中的对象出现内存泄漏导致的JNI global reference table overflow,会导致system_server进程被kill掉而发生系统重启。

https://blog.csdn.net/aaajj/article/details/83141985

 

系统重启,log

pid: 1279, tid: 2518, name: Binder:1279_9  >>> system_server <<<

signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------

Abort message: 'art/runtime/indirect_reference_table.cc:132] JNI ERROR (app bug): global reference table overflow (max=51200)'

 

backtrace:

    #00 pc 000000000006d794  /system/lib64/libc.so (tgkill+8)

    #01 pc 000000000006abb4  /system/lib64/libc.so (pthread_kill+64)

    #02 pc 0000000000024098  /system/lib64/libc.so (raise+24)

    #03 pc 000000000001c93c  /system/lib64/libc.so (abort+52)

    #04 pc 000000000043581c  /system/lib64/libart.so (_ZN3art7Runtime5AbortEPKc+464)

    #05 pc 00000000000e5e7c  /system/lib64/libart.so (_ZN3art10LogMessageD2Ev+1592)

    #06 pc 000000000024dd48  /system/lib64/libart.so (_ZN3art22IndirectReferenceTable3AddEjPNS_6mirror6ObjectE+308)

    #07 pc 00000000002f2468  /system/lib64/libart.so (_ZN3art9JavaVMExt12AddGlobalRefEPNS_6ThreadEPNS_6mirror6ObjectE+60)

    #08 pc 000000000032de8c  /system/lib64/libart.so (_ZN3art3JNI12NewGlobalRefEP7_JNIEnvP8_jobject+596)

    #09 pc 0000000000101454  /system/lib64/libandroid_runtime.so (_ZN7android20javaObjectForIBinderEP7_JNIEnvRKNS_2spINS_7IBinderEEE+428)

    #10 pc 00000000000f5a3c  /system/lib64/libandroid_runtime.so

    #11 pc 000000007564f254  /data/dalvik-cache/arm64/system@framework@boot-framework.oat (offset 0x19fc000)

 

主要发生泄漏的地方在javaObjectForIBinder 和 contentObersver对象的处理上,这2个地方Android代码中都进行了修复处理,

恶意注册contentObersver的进程由于binderProxy对象太多,会被系统kill掉。具体处理过程可抓log查看,

参考apk

https://github.com/SundayCool/JNIoverflow

 

系统进程system_server将很难出现JNI global reference table overflow导致的重启问题了,

所以,JNI global reference table overflow将会淡出开发者的视线,或许会被遗忘。

再见了,JNI global reference table overflow

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值