我有点困惑这个... ReferenceTable溢出(最大= 512),我确定它与我在本机方法调用中创建的本地引用数量有关...要解决这个问题我甚至有试图从本机调用中删除本地引用; 但我仍然无法解决问题......我正在传递2D数组; 大约是1024 X 1024 ......
这是我所指的错误跟踪...我确信创建的整数对象的数量导致了我的情况的问题...因为你应该能够看到506(I)对象被创建...和然后JNI遇到了瓶颈......
/dalvikvm(9498): GC_CONCURRENT freed 1981K, 41% free 6891K/11527K, external 1625K/2137K, paused 2ms+3ms
/dalvikvm(9498): ReferenceTable overflow (max=512)
/dalvikvm(9498): Last 10 entries in JNI local reference table:
/dalvikvm(9498): 502: 0x40710920 cls=[I (4092 bytes)
/dalvikvm(9498): 503: 0x40711920 cls=[I (4092 bytes)
/dalvikvm(9498): 504: 0x40712920 cls=[I (4092 bytes)
/dalvikvm(9498): 505: 0x40713920 cls=[I (4092 bytes)
/dalvikvm(9498): 506: 0x40714920 cls=[I (4092 bytes)
/dalvikvm(9498): 507: 0x40715920 cls=[I (4092 bytes)
/dalvikvm(9498): 508: 0x40716920 cls=[I (4092 bytes)
/dalvikvm(9498): 509: 0x40717920 cls=[I (4092 …Run Code Online (Sandbox Code Playgroud) 我试图用我自己的数据集运行LibSVMAndroidClassification Android项目.它与已经提供的数据集完美配合,当我使用100行(小于原始大小的1%)的csv时,它也可以正常工作.但是当我尝试使用例如1000行的"Train CSV"时,我看到了这个错误.我甚至试图在Manifest.xml中设置android:largeHeap ="true"但没有任何改进.
这是我的logcat转储.
10-31 17:49:06.745: E/dalvikvm(2008): JNI ERROR (app bug): local reference table overflow (max=512)
10-31 17:49:06.745: W/dalvikvm(2008): JNI local reference table (0x754057e0) dump:
10-31 17:49:06.745: W/dalvikvm(2008): Last 10 entries (of 512):
10-31 17:49:06.745: W/dalvikvm(2008): 511: 0x42d900b0 double
10-31 17:49:06.745: W/dalvikvm(2008): 510: 0x42a19698 int
10-31 17:49:06.745: W/dalvikvm(2008): 509: 0x42d8ff78 double
10-31 17:49:06.745: W/dalvikvm(2008): 508: 0x42a195f0 int
10-31 17:49:06.745: W/dalvikvm(2008): 507: 0x42d8fe40 double
10-31 17:49:06.745: W/dalvikvm(2008): 506: 0x42a19548 int
10-31 17:49:06.745: W/dalvikvm(2008): 505: 0x42d8fd08 double
10-31 17:49:06.745: W/dalvikvm(2008): …Run Code Online (Sandbox Code Playgroud) 我有一个Java类,具有使用C ++实现的本机函数,称为nz.ac.unitec.BigInteger。的本机实现nz.ac.unitec.BigInteger很简单,只是包裹java.math.BigInteger,并调用它的构造函数和add,subtract,multiply...功能。一个字段mNativeContext中nz.ac.unitec.BigInteger用于存储的全局引用一个java.math.BigInteger对象。该对象具有终结器,该终结器应该在垃圾回收对象时销毁全局引用,因此我不会泄漏全局引用。
当我运行一个简单的测试循环以创建多个nz.ac.unitec.BigInteger对象而不显式释放所创建的对象时,在日志(LOG1)之后报告了JNI错误。但是,如果我在离开测试功能之前显式释放创建的对象,则压力测试可以成功执行。
当我有终结器要在垃圾回收对象中删除它们时,为什么JVM的全局引用用完了?
LOG1:
F/art (10730): art/runtime/indirect_reference_table.cc:113] JNI ERROR (app bug): global reference table overflow (max=51200)
F/art (10730): art/runtime/indirect_reference_table.cc:113] global reference table dump:
F/art (10730): art/runtime/indirect_reference_table.cc:113] Last 10 entries (of 51200):
F/art (10730): art/runtime/indirect_reference_table.cc:113] 51199: 0x12e88790 java.math.BigInteger
F/art (10730): art/runtime/indirect_reference_table.cc:113] 51198: 0x12e85490 java.math.BigInteger
F/art (10730): art/runtime/indirect_reference_table.cc:113] 51197: 0x12e81790 java.math.BigInteger
F/art (10730): art/runtime/indirect_reference_table.cc:113] 51196: 0x12e7e760 java.math.BigInteger
F/art (10730): art/runtime/indirect_reference_table.cc:113] 51195: …Run Code Online (Sandbox Code Playgroud)