当hashmap>时JNI溢出512

时间:2011-04-25 01:04:22

标签: android java-native-interface hashmap overflow

使用资源文件,我创建了一个大的hashmap

HashMap<String, String> bigHash = new HashMap<String, String>();
public void createHash(){
    String [] items = getResources().getStringArray(R.array.dual_strings);
    String [] temp;
    for ( String s : items ){
        temp = s.split("@");
        bigHash.put(temp[0],temp[1]);
    }
}

dual_string.xml充满了像这样的记录     “睡觉@一天睡得超过6小时”

但是,我尝试了一个大的(~1000项)dual_strings.xml文件,应用程序在启动后立即崩溃。 看着LogCag “dalvikvm无法添加到JNI本地ref表(有512个条目)”

我可以做些什么来创建和使用我的长资源文件中的大哈希? 感谢

1 个答案:

答案 0 :(得分:2)

这看起来像是Android的getStringArrayResources本机代码中的一个错误。我发现已经存在一个错误。在本机代码中很容易看到这个原因(引用是在循环中创建的,但是没有清理)。

http://code.google.com/p/android/issues/detail?id=5287&q=getArrayStringResource&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars

目前,您必须解决此错误。您必须将字符串数组拆分为每个小于500个字符串的块,或者编写自己的自定义字符串数组加载方法。也许其他人可以提出更好的解决方案。