Java Android:本地进程在一段时间后引发可引用溢出(Android ndk)
我使用ndk编译了一个用C编写的代码。该程序是一个ecm格式文件转换程序,这里的本机代码:。 出于优化的原因,我选择使用JNI,因为该程序需要大量CPU处理 要转换的文件可能非常大,介于200mb和700mb之间。一切工作正常,但当尝试转换大于600Mb的文件时,在转换过程即将结束时,应用程序会停止并显示以下错误消息:Java Android:本地进程在一段时间后引发可引用溢出(Android ndk),java,android,c,Java,Android,C,我使用ndk编译了一个用C编写的代码。该程序是一个ecm格式文件转换程序,这里的本机代码:。 出于优化的原因,我选择使用JNI,因为该程序需要大量CPU处理 要转换的文件可能非常大,介于200mb和700mb之间。一切工作正常,但当尝试转换大于600Mb的文件时,在转换过程即将结束时,应用程序会停止并显示以下错误消息: 11-13 20:24:36.775: WARN/dalvikvm(1468): ReferenceTable overflow (max=512) 11-13 20:24:36
11-13 20:24:36.775: WARN/dalvikvm(1468): ReferenceTable overflow (max=512)
11-13 20:24:36.775: WARN/dalvikvm(1468): Last 10 entries in JNI local reference table:
11-13 20:24:36.775: WARN/dalvikvm(1468): 502: 0x465117b0 cls=Ljava/lang/Class; 'Lunecm4droid/kiio/es/mainUECM;' (164 bytes)
11-13 20:24:36.775: WARN/dalvikvm(1468): 503: 0x465117b0 cls=Ljava/lang/Class; 'Lunecm4droid/kiio/es/mainUECM;' (164 bytes)
11-13 20:24:36.775: WARN/dalvikvm(1468): 504: 0x465117b0 cls=Ljava/lang/Class; 'Lunecm4droid/kiio/es/mainUECM;' (164 bytes)
11-13 20:24:36.775: WARN/dalvikvm(1468): 505: 0x465117b0 cls=Ljava/lang/Class; 'Lunecm4droid/kiio/es/mainUECM;' (164 bytes)
11-13 20:24:36.775: WARN/dalvikvm(1468): 506: 0x465117b0 cls=Ljava/lang/Class; 'Lunecm4droid/kiio/es/mainUECM;' (164 bytes)
11-13 20:24:36.775: WARN/dalvikvm(1468): 507: 0x465117b0 cls=Ljava/lang/Class; 'Lunecm4droid/kiio/es/mainUECM;' (164 bytes)
11-13 20:24:36.775: WARN/dalvikvm(1468): 508: 0x465117b0 cls=Ljava/lang/Class; 'Lunecm4droid/kiio/es/mainUECM;' (164 bytes)
11-13 20:24:36.786: WARN/dalvikvm(1468): 509: 0x465117b0 cls=Ljava/lang/Class; 'Lunecm4droid/kiio/es/mainUECM;' (164 bytes)
11-13 20:24:36.786: WARN/dalvikvm(1468): 510: 0x465117b0 cls=Ljava/lang/Class; 'Lunecm4droid/kiio/es/mainUECM;' (164 bytes)
11-13 20:24:36.786: WARN/dalvikvm(1468): 511: 0x465117b0 cls=Ljava/lang/Class; 'Lunecm4droid/kiio/es/mainUECM;' (164 bytes)
11-13 20:24:36.786: WARN/dalvikvm(1468): JNI local reference table summary (512 entries):
11-13 20:24:36.786: WARN/dalvikvm(1468): 512 of Ljava/lang/Class; 164B (1 unique)
11-13 20:24:36.786: WARN/dalvikvm(1468): Memory held directly by tracked refs is 164 bytes
11-13 20:24:36.786: ERROR/dalvikvm(1468): Failed adding to JNI local ref table (has 512 entries)
11-13 20:24:36.786: INFO/dalvikvm(1468): "Thread-9" prio=5 tid=8 RUNNABLE
11-13 20:24:36.786: INFO/dalvikvm(1468): | group="main" sCount=0 dsCount=0 s=N obj=0x46523c48 self=0x30e960
11-13 20:24:36.786: INFO/dalvikvm(1468): | sysTid=1506 nice=0 sched=0/0 cgrp=default handle=2542616
11-13 20:24:36.786: INFO/dalvikvm(1468): | schedstat=( 200042694099 61087921121 333928 )
11-13 20:24:36.786: INFO/dalvikvm(1468): at unecm4droid.kiio.es.mainUECM.invokeNativeFunction(Native Method)
11-13 20:24:36.786: INFO/dalvikvm(1468): at unecm4droid.kiio.es.mainUECM.access$10(mainUECM.java:490)
11-13 20:24:36.786: INFO/dalvikvm(1468): at unecm4droid.kiio.es.mainUECM$11.run(mainUECM.java:735)
11-13 20:24:36.786: ERROR/dalvikvm(1468): VM aborting
11-13 20:24:36.795: INFO/DEBUG(121): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
11-13 20:24:36.795: INFO/DEBUG(121): Build fingerprint: 'google/passion/passion/mahimahi:2.2/FRF91/43546:user/release-keys'
11-13 20:24:36.795: INFO/DEBUG(121): pid: 1468, tid: 1506 >>> unecm4droid.kiio.es <<<
11-13 20:24:36.795: INFO/DEBUG(121): signal 11 (SIGSEGV), fault addr deadd00d
11-13 20:24:36.795: INFO/DEBUG(121): r0 00000026 r1 afd14699 r2 afd14699 r3 00000000
11-13 20:24:36.795: INFO/DEBUG(121): r4 802a3448 r5 802a3448 r6 0030e960 r7 0030e9b0
11-13 20:24:36.795: INFO/DEBUG(121): r8 464c9b48 r9 43277fa4 10 43277f8c fp 464c9ed8
11-13 20:24:36.795: INFO/DEBUG(121): ip deadd00d sp 464c9130 lr afd16155 pc 802424e0 cpsr 20000030
11-13 20:24:36.795: INFO/DEBUG(121): d0 643a64696f72646e d1 6472656767756265
11-13 20:24:36.795: INFO/DEBUG(121): d2 465117b046511767 d3 465117b04651170a
11-13 20:24:36.795: INFO/DEBUG(121): d4 465117b0465117b0 d5 465117b0465117b0
11-13 20:24:36.795: INFO/DEBUG(121): d6 465117b0465117b0 d7 465117b0465117b0
11-13 20:24:36.795: INFO/DEBUG(121): d8 4198000041b80000 d9 43e0000000000000
11-13 20:24:36.795: INFO/DEBUG(121): d10 41dfffffffc00000 d11 c3e0000000000000
11-13 20:24:36.795: INFO/DEBUG(121): d12 0000000000000000 d13 0000000000000000
11-13 20:24:36.795: INFO/DEBUG(121): d14 0000000000000000 d15 0000000000000000
11-13 20:24:36.795: INFO/DEBUG(121): d16 47d7202800000000 d17 c083180000000000
11-13 20:24:36.795: INFO/DEBUG(121): d18 4035000000000000 d19 0000000000000000
11-13 20:24:36.795: INFO/DEBUG(121): d20 3ff0000000000000 d21 8000000000000000
11-13 20:24:36.795: INFO/DEBUG(121): d22 c035000000000000 d23 ff00080008000700
11-13 20:24:36.795: INFO/DEBUG(121): d24 ff00080008000700 d25 ff00080008000700
11-13 20:24:36.795: INFO/DEBUG(121): d26 0100010001000100 d27 0100010001000100
11-13 20:24:36.795: INFO/DEBUG(121): d28 0100010001000100 d29 3ff0000000000000
11-13 20:24:36.795: INFO/DEBUG(121): d30 0000000000000000 d31 3ff0000000000000
11-13 20:24:36.795: INFO/DEBUG(121): scr 80000012
11-13 20:24:36.865: INFO/DEBUG(121): #00 pc 000424e0 /system/lib/libdvm.so
11-13 20:24:36.865: INFO/DEBUG(121): #01 pc 0004655e /system/lib/libdvm.so
11-13 20:24:36.865: INFO/DEBUG(121): #02 pc 000466f0 /system/lib/libdvm.so
11-13 20:24:36.865: INFO/DEBUG(121): #03 pc 00001110 /data/data/unecm4droid.kiio.es/lib/libndkfoo.so
11-13 20:24:36.865: INFO/DEBUG(121): #04 pc 000016da /data/data/unecm4droid.kiio.es/lib/libndkfoo.so
11-13 20:24:36.865: INFO/DEBUG(121): #05 pc 00001bda /data/data/unecm4droid.kiio.es/lib/libndkfoo.so
11-13 20:24:36.865: INFO/DEBUG(121): #06 pc 00001f2e /data/data/unecm4droid.kiio.es/lib/libndkfoo.so
11-13 20:24:36.865: INFO/DEBUG(121): #07 pc 00017034 /system/lib/libdvm.so
11-13 20:24:36.865: INFO/DEBUG(121): #08 pc 00045744 /system/lib/libdvm.so
11-13 20:24:36.865: INFO/DEBUG(121): #09 pc 0004ae8e /system/lib/libdvm.so
11-13 20:24:36.865: INFO/DEBUG(121): #10 pc 0001bf98 /system/lib/libdvm.so
11-13 20:24:36.865: INFO/DEBUG(121): #11 pc 00022bc4 /system/lib/libdvm.so
11-13 20:24:36.865: INFO/DEBUG(121): #12 pc 00021a60 /system/lib/libdvm.so
11-13 20:24:36.865: INFO/DEBUG(121): #13 pc 0005cf60 /system/lib/libdvm.so
11-13 20:24:36.865: INFO/DEBUG(121): #14 pc 0005d190 /system/lib/libdvm.so
11-13 20:24:36.876: INFO/DEBUG(121): #15 pc 000500d0 /system/lib/libdvm.so
11-13 20:24:36.876: INFO/DEBUG(121): #16 pc 00010f44 /system/lib/libc.so
11-13 20:24:36.876: INFO/DEBUG(121): #17 pc 00010a30 /system/lib/libc.so
11-13 20:24:36.876: INFO/DEBUG(121): code around pc:
11-13 20:24:36.876: INFO/DEBUG(121): 802424c0 20061861 f7d418a2 2000ea7c ebdaf7d4
11-13 20:24:36.876: INFO/DEBUG(121): 802424d0 58234808 b1036bdb f8df4798 2026c01c
11-13 20:24:36.876: INFO/DEBUG(121): 802424e0 0000f88c ec40f7d4 00060f8c fffe1ecc
11-13 20:24:36.876: INFO/DEBUG(121): 802424f0 fffe5140 000003a4 deadd00d f8dfb40e
11-13 20:24:36.876: INFO/DEBUG(121): 80242500 b503c02c bf00490a 188ba200 f853aa03
11-13 20:24:36.876: INFO/DEBUG(121): code around lr:
11-13 20:24:36.876: INFO/DEBUG(121): afd16134 000ef9b0 22022100 ec98f7f7 463289a1
11-13 20:24:36.876: INFO/DEBUG(121): afd16144 5080f421 81a04629 000ef9b4 ec1ef7f7
11-13 20:24:36.876: INFO/DEBUG(121): afd16154 bf00bd70 4604b510 000ef9b0 ec06f7f7
11-13 20:24:36.876: INFO/DEBUG(121): afd16164 bfbe2800 f42389a3 81a35380 6d21db02
11-13 20:24:36.876: INFO/DEBUG(121): afd16174 6523180b bf00bd10 b085b5f0 bf004c41
11-13 20:24:36.876: INFO/DEBUG(121): stack:
11-13 20:24:36.876: INFO/DEBUG(121): 464c90f0 000005a0
11-13 20:24:36.876: INFO/DEBUG(121): 464c90f4 afd146c9 /system/lib/libc.so
11-13 20:24:36.876: INFO/DEBUG(121): 464c90f8 afd42498 /system/lib/libc.so
11-13 20:24:36.876: INFO/DEBUG(121): 464c90fc afd43bc8 /system/lib/libc.so
11-13 20:24:36.876: INFO/DEBUG(121): 464c9100 00000000
11-13 20:24:36.876: INFO/DEBUG(121): 464c9104 afd156e3 /system/lib/libc.so
11-13 20:24:36.876: INFO/DEBUG(121): 464c9108 afd14699 /system/lib/libc.so
11-13 20:24:36.876: INFO/DEBUG(121): 464c910c afd14699 /system/lib/libc.so
11-13 20:24:36.876: INFO/DEBUG(121): 464c9110 afd146f0 /system/lib/libc.so
11-13 20:24:36.876: INFO/DEBUG(121): 464c9114 802a3448 /system/lib/libdvm.so
11-13 20:24:36.876: INFO/DEBUG(121): 464c9118 802a3448 /system/lib/libdvm.so
11-13 20:24:36.876: INFO/DEBUG(121): 464c911c 0030e960 [heap]
11-13 20:24:36.876: INFO/DEBUG(121): 464c9120 0030e9b0 [heap]
11-13 20:24:36.876: INFO/DEBUG(121): 464c9124 afd146fd /system/lib/libc.so
11-13 20:24:36.876: INFO/DEBUG(121): 464c9128 df002777
11-13 20:24:36.876: INFO/DEBUG(121): 464c912c e3a070ad
11-13 20:24:36.876: INFO/DEBUG(121): #00 464c9130 465117b0 /dev/ashmem/mspace/dalvik-heap/2 (deleted)
11-13 20:24:36.876: INFO/DEBUG(121): 464c9134 80246563 /system/lib/libdvm.so
11-13 20:24:36.876: INFO/DEBUG(121): #01 464c9138 000b4890 [heap]
11-13 20:24:36.876: INFO/DEBUG(121): 464c913c 00000000
11-13 20:24:36.876: INFO/DEBUG(121): 464c9140 00000051
11-13 20:24:36.876: INFO/DEBUG(121): 464c9144 0030e960 [heap]
11-13 20:24:36.876: INFO/DEBUG(121): 464c9148 000b4890 [heap]
11-13 20:24:36.876: INFO/DEBUG(121): 464c914c 46512b88 /dev/ashmem/mspace/dalvik-heap/2 (deleted)
11-13 20:24:36.876: INFO/DEBUG(121): 464c9150 43277fac
11-13 20:24:36.876: INFO/DEBUG(121): 464c9154 802466f5 /system/lib/libdvm.so
有人能帮我找到更多关于错误的线索吗
Thx to all。可能您没有释放已分配的某些引用,例如使用
env->NewStringUTF(path)
执行大量字符串。当您使用本机代码时,系统不会处理它。您需要自己删除它,或者让系统返回java代码
看
5.2释放引用
每个JNI引用都使用特定的
本身的内存量,以
添加到由
参考对象。作为一名JNI程序员,
你应该知道
程序将使用的引用
在特定的时间。特别是你
应该知道的上限
您的本地引用的数量
程序可以在运行期间的任何时间点创建
它的执行,即使这些地方
引用最终将被释放
由虚拟机自动执行。
但是,引用创建过多
短暂的,会导致记忆
精疲力竭
真的,真的。这就是问题所在,现在已经解决了。:)@库鲁祖thx!您为清除引用所做的修复是什么?我的webview中有这个问题
Program received signal SIGSTOP, Stopped (signal).