我的应用程序做的第一件事就是读入一个充满单词的文本文件,并从中构建一个 trie。在旧手机上进行测试,即具有 512MB RAM 的 Droid X,在构建 trie 时,有时会因“160 字节分配内存不足”而崩溃。
奇怪的是,它不会每次都崩溃。使用 80K 的单词表,它会在每次启动时崩溃。使用 20K 字的列表,每四次启动应用程序时它就会崩溃。我不明白发生了什么会影响多次启动的内存分配,但这是可以预测的。
我能做些什么来释放或预分配内存,以便它每次都能工作吗?
我可能正在做一些愚蠢/浪费的事情来构建特里树,所以我会发布相关的内容。这是读取文件并添加到 trie 的部分:
public void LoadText(Activity a) {
InputStream is = a.getResources().openRawResource(dictfile);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String readLine = null;
int wordsadded = 0, timeslogged = 0;
try {
while ((readLine = br.readLine()) != null) {
trie.insert(readLine.toUpperCase(Locale.US));
}
is.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
这是 trie 的插入方法:
protected void insert(String word) {
int n = word.charAt(0) - 'A';
if (c[n] == null)
c[n] = new TrieNode();
if (word.length() == 1) {
c[n].end = true;
} else {
c[n].insert(word.substring(1));
}
}