Moh*_*han 8 java string android arraylist low-memory
我需要存储一个大型自然语言词典 - 最多120,000,具体取决于语言.这些需要保存在内存中,因为分析表明利用阵列的算法是系统中的时间瓶颈.(它本质上是一种拼写检查/自动更正算法,但细节并不重要.)在具有16MB内存的Android设备上,与Java相关的内存开销String导致我们的空间不足.请注意,每个String都有一个与之相关的38字节开销,这会产生高达5MB的开销.
乍一看,一个选项是替代char[]的String.(或者甚至byte[],因为UTF-8在这种情况下更紧凑.)但同样,内存开销是个问题:每个Java数组都有32字节的开销.
另一种替代方法ArrayList<String>是创建一个具有相同接口的类,该类在内部将所有字符串连接成一个巨大的字符串,例如表示为单个字符串,byte[]然后将偏移存储到该巨大的字符串中.每个偏移量将占用4个字节,从而提供更节省空间的解决方案.
我的问题是a)是否有任何其他解决问题的方法,同样低开销*和b)是现成的任何解决方案吗?通过Guava,trove和PCJ集合库搜索没有任何结果.
*我知道可以将开销降到4字节以下,但收益递减.
NB.是否支持在HotSpot JVM中删除压缩字符串?表明JVM选项-XX:+UseCompressedStrings在这里没有帮助.
小智 0
我必须为课堂项目开发一本词典。我们最终使用了 trie 作为数据结构。不确定 ArrayList 和 Trie 之间的大小差异,但性能要好得多。
以下是一些可能有用的资源。
https://en.wikipedia.org/wiki/Trie
https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/
| 归档时间: |
|
| 查看次数: |
1829 次 |
| 最近记录: |