1

我的应用程序做的第一件事就是读入一个充满单词的文本文件,并从中构建一个 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));
    }
}
4

0 回答 0