我用ndk编译了一个C写的代码,这个程序是一个ecm格式的文件转换,这里的native code: 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 调试 native 进程,但我只在应用程序崩溃时给出此消息:
Program received signal SIGSTOP, Stopped (signal).
谁能帮我找到更多关于错误的线索?
谢谢大家。
最佳答案
也许您没有释放一些已分配的引用,例如使用 env->NewStringUTF(path) 处理大量字符串。当您使用 native 代码时,系统不会处理它。要么需要自己删除,要么需要让系统返回java代码!
参见 http://java.sun.com/docs/books/jni/html/refs.html#27567
5.2 Freeing References
Each JNI reference consumes a certain amount of memory by itself, in addition to the memory taken by the referred object. As a JNI programmer, you should be aware of the number of references that your program will use at a given time. In particular, you should be aware of the upper bound of the number of local references your program can create at any point during its execution, even though these local references will eventually be freed automatically by the virtual machine. Excessive reference creation, however transient, can lead to memory exhaustion.
关于java - Android: native 进程在一段时间后引发 ReferenceTable 溢出 (android-ndk),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4174453/
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我在rspec中收到来自webkit驱动程序的以下消息:Capybara::Driver::Webkit::WebkitInvalidResponseError:UnabletoloadURL:http://127.0.0.1:44923/posts几天前它成功了。问题出在save_page方法上。有什么问题吗? 最佳答案 当我的页面出现错误时,我收到过类似的错误消息。您应该通过在测试模式下启动服务器(railss-etest)并自行访问页面来手动检查情况是否如此。 关于ruby-on-
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/
HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候