【问题标题】:Android: Native process provoke ReferenceTable overflow after a while (android-ndk)Android:本机进程在一段时间后引发 ReferenceTable 溢出(android-ndk)
【发布时间】:2010-11-13 20:10:43
【问题描述】:

使用ndk编译了一段C写的代码,程序是ecm格式文件的转换,这里是native代码:link。 出于优化的原因,我选择使用 JNI,因为程序需要大量的 CPU 处理。

要转换的文件可能非常大,介于 200mb 和 700mb 之间。一切正常,但是当尝试转换大于 600Mb 的文件时,在转换过程接近尾声时,应用程序停止并显示以下错误消息:

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

我尝试使用 gdb 调试本机进程,但我只在应用崩溃时给出此消息:

Program received signal SIGSTOP, Stopped (signal).

有人可以帮我找到更多关于错误的线索吗?

谢谢大家。

【问题讨论】:

    标签: java android c


    【解决方案1】:

    也许您没有释放您已分配的一些引用,例如使用env-&gt;NewStringUTF(path) 处理大量字符串。当您使用本机代码时,系统不会处理它。要么自己删除,要么让系统返回java代码!

    http://java.sun.com/docs/books/jni/html/refs.html#27567

    5.2 释放引用

    每个 JNI 引用消耗一定的 本身的内存量,在 除了所占用的内存 引用的对象。作为一名 JNI 程序员, 你应该知道的数量 您的程序将使用的引用 在给定的时间。特别是,您 应该知道的上限 您的本地参考的数量 程序可以在任何时候创建 它的执行,即使这些本地 引用最终将被释放 由虚拟机自动生成。 然而,过多的参考创建 瞬态,会导致记忆 筋疲力尽。

    【讨论】:

    • 真的,真的谢谢。那是问题所在,现在已解决。 :)
    • @KuRouZu 谢谢!你为清除参考做了什么修复?我在 stackoverflow.com/questions/6415182/… 的 webview 中遇到了这个问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多