android过度的全局引用

android过度的全局引用,android,java-native-interface,emulation,Android,Java Native Interface,Emulation,我偶尔会绊倒android模拟器的jni全局参考极限。我试图在我的应用程序中存储大约2000个单词和定义,但在两个方面都失败了:如果我使用DOM解析包含所有这些引用的xml文件,当DOM将树拉入内存时就会失败。如果我使用SAX,当我到达第2000个元素时,它会失败 是否有人链接到我如何禁用该检查(我知道它在实际机器上不存在,我正在尝试在内存中保留2000个小对象)?如果没有,有没有一个好的方法来调试它?正在生成的对象是字符串: 09-20 16:24:00.278: WARN/dalvikvm(

我偶尔会绊倒android模拟器的jni全局参考极限。我试图在我的应用程序中存储大约2000个单词和定义,但在两个方面都失败了:如果我使用DOM解析包含所有这些引用的xml文件,当DOM将树拉入内存时就会失败。如果我使用SAX,当我到达第2000个元素时,它会失败

是否有人链接到我如何禁用该检查(我知道它在实际机器上不存在,我正在尝试在内存中保留2000个小对象)?如果没有,有没有一个好的方法来调试它?正在生成的对象是字符串:

09-20 16:24:00.278: WARN/dalvikvm(625):  1879 of Ljava/lang/String; 28B (1877 unique)
我尝试用
-nojni
启动avd,并使用
adb
设置
dalvik.vm.checkjni

C:\android-sdk-windows\tools>adb shell getprop dalvik.vm.checkjni
false
尽管logcat显示“CheckJNI已关闭”,但它仍然超出了globalref 2001的限制

此外,在解析部分之后,内存最终返回,如我所见:

09-20 16:31:23.238: DEBUG/dalvikvm(654): GC_EXPLICIT freed 1157 objects / 48208 bytes in 147ms
09-20 16:31:23.258: DEBUG/dalvikvm(654): GREF has decreased to 1799
09-20 16:31:23.278: DEBUG/dalvikvm(654): GREF has decreased to 1699
09-20 16:31:23.287: DEBUG/dalvikvm(654): GREF has decreased to 1599
09-20 16:31:23.309: DEBUG/dalvikvm(654): GREF has decreased to 1499
09-20 16:31:23.328: DEBUG/dalvikvm(654): GREF has decreased to 1399
09-20 16:31:23.338: DEBUG/dalvikvm(654): GREF has decreased to 1299
09-20 16:31:23.367: DEBUG/dalvikvm(654): GREF has decreased to 1199
09-20 16:31:23.367: DEBUG/dalvikvm(654): GREF has decreased to 1099
09-20 16:31:23.398: DEBUG/dalvikvm(654): GREF has decreased to 999
09-20 16:31:23.398: DEBUG/dalvikvm(654): GREF has decreased to 899
09-20 16:31:23.408: DEBUG/dalvikvm(654): GREF has decreased to 799
09-20 16:31:23.418: DEBUG/dalvikvm(654): GREF has decreased to 699
09-20 16:31:23.418: DEBUG/dalvikvm(654): GREF has decreased to 599
09-20 16:31:23.437: DEBUG/dalvikvm(654): GREF has decreased to 499
09-20 16:31:23.447: DEBUG/dalvikvm(654): GREF has decreased to 399
09-20 16:31:23.447: DEBUG/dalvikvm(654): GREF has decreased to 299
09-20 16:31:23.469: DEBUG/dalvikvm(654): GREF has decreased to 199
所以我不认为是我的hashmap保存了word对象才是真正的问题所在。我剩下的唯一想法是将xml文件切成倍数,但这似乎是一个不雅观的解决方案


非常感谢

虽然比sax稍慢,但在使用XML Pull解析器时,过多的全局引用似乎会消失。

这是我们基于expat的XML解析器(sax和Pull)中的一个错误:

您尝试过xmlpull解析器吗?非常好的调用,我从sax解析器复制了基本相同的代码,尽管它运行速度慢了10%或15%(与他们在这里所说的相符)它完全解决了全局jni引用的问题!这听起来像是平台中的一个bug。没有理由让所有这些字符串都被本机代码固定在内存中。你还有导致问题的APK副本吗?我很想得到一份副本,看看问题是否仍然存在。(将它附加到b.android.com上的bug报告可能是发送它的最简单方式。)