關於JNI local ref未釋放可在tombstones中去查看具體函數

例子一:

死機後拿到tombstones文件,看到 JNI ERROR (app bug): local reference table overflow (max=512)基本可以確認是JNI申請的某些local ref未釋放導致的。

再往下看,有dalvikvm打印出來的信息,很多重複的 com.tcl.tvapi.model.DtvPvrEvent,這個說明是jni中申請的DtvPvrEvent的obj

 的local ref沒有釋放導致,我用deletelocalref釋放後此問題就解決了。

06-24 15:18:42.000   531   623 E dalvikvm: JNI ERROR (app bug): local reference table overflow (max=512)

06-24 15:18:42.000   531   623 W dalvikvm: JNI local reference table (0x785077b8) dump:
06-24 15:18:42.000   531   623 W dalvikvm:   Last 10 entries (of 512):
06-24 15:18:42.000   531   623 W dalvikvm:       511: 0x41e394d8 java.lang.String "EventNotify"
06-24 15:18:42.000   531   623 W dalvikvm:       510: 0x41abb0b8 java.lang.Class<android.util.Log>
06-24 15:18:42.000   531   623 W dalvikvm:       509: 0x420db918 com.tcl.tvapi.model.DtvPvrEvent
06-24 15:18:42.000   531   623 W dalvikvm:       508: 0x420d4cc8 com.tcl.tvapi.model.DtvPvrEvent
06-24 15:18:42.000   531   623 W dalvikvm:       507: 0x420c5010 com.tcl.tvapi.model.DtvPvrEvent
06-24 15:18:42.000   531   623 W dalvikvm:       506: 0x42010ef0 com.tcl.tvapi.model.DtvPvrEvent
06-24 15:18:42.000   531   623 W dalvikvm:       505: 0x41f20b68 com.tcl.tvapi.model.DtvPvrEvent
06-24 15:18:42.000   531   623 W dalvikvm:       504: 0x425cda48 com.tcl.tvapi.model.DtvPvrEvent
06-24 15:18:42.000   531   623 W dalvikvm:       503: 0x420aada0 com.tcl.tvapi.model.DtvPvrEvent
06-24 15:18:42.000   531   623 W dalvikvm:       502: 0x4204d898 com.tcl.tvapi.model.DtvPvrEvent
06-24 15:18:42.000   531   623 W dalvikvm:   Summary:
06-24 15:18:42.000   531   623 W dalvikvm:         3 of java.lang.Class (3 unique instances)
06-24 15:18:42.000   531   623 W dalvikvm:         1 of java.lang.String
06-24 15:18:42.000   531   623 W dalvikvm:       508 of com.tcl.tvapi.model.DtvPvrEvent (508 unique instances)
06-24 15:18:42.000   531   623 E dalvikvm: Failed adding to JNI local ref table (has 512 entries)
06-24 15:18:42.000   531   623 I dalvikvm: "Thread-32" prio=6 tid=25 RUNNABLE
06-24 15:18:42.000   531   623 I dalvikvm:   | group="main" sCount=0 dsCount=0 obj=0x41e9a178 self=0x730f9a48

06-24 15:18:42.000   531   623 I dalvikvm:   | sysTid=623 nice=-2 sched=0/0 cgrp=[no-cpu-subsys] handle=19478948


例子二:

拿到tombstone文件分析:

這個例子中,報錯的地方更明亮,dalvikvm直接指明瞭是com.tcl.factory.service.TService.native_doGetSnCode(Native Method)引起的死機。

01-01 00:00:17.540   526  1053 W dalvikvm: JNI WARNING: input is not valid Modified UTF-8: illegal continuation byte 0x55
01-01 00:00:17.540   526  1053 W dalvikvm:              string: '2013129000001鉛'
01-01 00:00:17.540   526  1053 W dalvikvm:              in Lcom/tcl/factory/service/TService;.native_doGetSnCode:()Ljava/lang/String; (NewStringUTF)
01-01 00:00:17.570   526  1053 I dalvikvm: "Binder_5" prio=5 tid=68 NATIVE
01-01 00:00:17.570   526  1053 I dalvikvm:   | group="main" sCount=0 dsCount=0 obj=0x41f546b8 self=0x77bb1f10
01-01 00:00:17.570   526  1053 I dalvikvm:   | sysTid=1053 nice=0 sched=0/0 cgrp=[no-cpu-subsys] handle=2001813616
01-01 00:00:17.570   526  1053 I dalvikvm:   | state=R schedstat=( 0 0 0 ) utm=3 stm=0 core=1
01-01 00:00:17.580   526  1053 I dalvikvm:   #00  pc 000012a0  /system/lib/libcorkscrew.so (unwind_backtrace_thread+27)
01-01 00:00:17.580   526  1053 I dalvikvm:   #01  pc 0005fd08  /system/lib/libdvm.so (dvmDumpNativeStack(DebugOutputTarget const*, int)+35)
01-01 00:00:17.580   526  1053 I dalvikvm:   #02  pc 00053b68  /system/lib/libdvm.so (dvmDumpThreadEx(DebugOutputTarget const*, Thread*, bool)+303)
01-01 00:00:17.580   526  1053 I dalvikvm:   #03  pc 00053c02  /system/lib/libdvm.so (dvmDumpThread(Thread*, bool)+25)
01-01 00:00:17.580   526  1053 I dalvikvm:   #04  pc 00038b7a  /system/lib/libdvm.so
01-01 00:00:17.580   526  1053 I dalvikvm:   #05  pc 00039f38  /system/lib/libdvm.so
01-01 00:00:17.580   526  1053 I dalvikvm:   #06  pc 0003c196  /system/lib/libdvm.so
01-01 00:00:17.580   526  1053 I dalvikvm:   #07  pc 000109c6  /tvos/mid_base/lib/libcom_tcl_tv_jni.so
01-01 00:00:17.580   526  1053 I dalvikvm:   #08  pc 0001e290  /system/lib/libdvm.so (dvmPlatformInvoke+112)
01-01 00:00:17.580   526  1053 I dalvikvm:   #09  pc 0004d410  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+395)
01-01 00:00:17.580   526  1053 I dalvikvm:   #10  pc 00038c04  /system/lib/libdvm.so (dvmCheckCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+7)
01-01 00:00:17.580   526  1053 I dalvikvm:   #11  pc 000276a0  /system/lib/libdvm.so
01-01 00:00:17.580   526  1053 I dalvikvm:   #12  pc 0002b57c  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
01-01 00:00:17.580   526  1053 I dalvikvm:   #13  pc 0005fc34  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+271)
01-01 00:00:17.580   526  1053 I dalvikvm:   #14  pc 0004cab4  /system/lib/libdvm.so
01-01 00:00:17.580   526  1053 I dalvikvm:   #15  pc 00040ae2  /system/lib/libdvm.so
01-01 00:00:17.580   526  1053 I dalvikvm:   #16  pc 0004a376  /system/lib/libandroid_runtime.so
01-01 00:00:17.580   526  1053 I dalvikvm:   #17  pc 0006786e  /system/lib/libandroid_runtime.so
01-01 00:00:17.580   526  1053 I dalvikvm:   #18  pc 0001435e  /system/lib/libbinder.so (android::BBinder::transact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+57)
01-01 00:00:17.580   526  1053 I dalvikvm:   #19  pc 00016f5a  /system/lib/libbinder.so (android::IPCThreadState::executeCommand(int)+513)
01-01 00:00:17.580   526  1053 I dalvikvm:   #20  pc 00017380  /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+183)
01-01 00:00:17.580   526  1053 I dalvikvm:   #21  pc 0001b1f4  /system/lib/libbinder.so
01-01 00:00:17.580   526  1053 I dalvikvm:   #22  pc 00011264  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+111)
01-01 00:00:17.580   526  1053 I dalvikvm:   #23  pc 0004795c  /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+63)
01-01 00:00:17.580   526  1053 I dalvikvm:   #24  pc 00010dca  /system/lib/libutils.so
01-01 00:00:17.580   526  1053 I dalvikvm:   #25  pc 0000e518  /system/lib/libc.so (__thread_entry+72)
01-01 00:00:17.580   526  1053 I dalvikvm:   #26  pc 0000dc04  /system/lib/libc.so (pthread_create+160)
01-01 00:00:17.580   526  1053 I dalvikvm:   at com.tcl.factory.service.TService.native_doGetSnCode(Native Method)
01-01 00:00:17.580   526  1053 I dalvikvm:   at com.tcl.factory.service.TService.doGetSnCode(TService.java:320)
01-01 00:00:17.580   526  1053 I dalvikvm:   at com.tcl.factory.IService$Stub.onTransact(IService.java:310)
01-01 00:00:17.580   526  1053 I dalvikvm:   at android.os.Binder.execTransact(Binder.java:351)
01-01 00:00:17.580   526  1053 I dalvikvm:   at dalvik.system.NativeStart.run(Native Method)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章