相关疑难解决方法(0)

ReferenceTable溢出(max = 512)JNI

我有点困惑这个... 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)

java-native-interface android android-ndk

11
推荐指数
1
解决办法
1万
查看次数

JNI ERROR(app bug):本地参考表溢出(max = 512)

我试图用我自己的数据集运行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)

c++ java-native-interface android android-ndk libsvm

10
推荐指数
1
解决办法
1万
查看次数

为什么需要释放在JNI本机函数中创建的全局引用?

我有一个Java类,具有使用C ++实现的本机函数,称为nz.ac.unitec.BigInteger。的本机实现nz.ac.unitec.BigInteger很简单,只是包裹java.math.BigInteger,并调用它的构造函数和addsubtractmultiply...功能。一个字段mNativeContextnz.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)

java java-native-interface reference

2
推荐指数
1
解决办法
7234
查看次数