java - 在 Java 中读取字典文件时内存过多

标签 java memory dictionary

我读了一本大小可能为 100MB 左右的字典(有时会更大,最大可达 500MB)。它是一个简单的两列字典,第一列是单词,第二列是浮点值。我以这种方式读取字典file:

BufferedReader br = new BufferedReader(new FileReader(file));
        String line;
        while((line = br.readLine()) != null) {
            String[] cols = line.split("\t");
            setIt(cols[0], cols[1]);

对于 setIt 函数:

public void setIt(String term, String value) {
    all.put(term, new Double(value));
    }

当我有一个大文件时,加载它需要很长时间,并且经常会出现内存不足的情况。即使文件大小合理(100MB),Java 也需要 4GB 内存才能运行。

有什么线索可以在不改变整个包结构的情况下改进它吗?

编辑:我正在使用 -Xmx1g 的 50MB 文件,但仍然收到错误。

更新:我修复了文件上的一些迭代,现在内存问题已部分解决。尚未尝试这些属性和其他解决方案并对此进行报告。

最佳答案

您正在为每一行分配一个新字符串。有一些与字符串相关的开销。请参阅Here进行计算。 This文章还讨论了 Java 中对象内存使用的主题。

有一个关于更内存有效地替换字符串的堆栈溢出问题 here .

有什么办法可以避免所有这些分配吗?例如,是否可以在数据结构中将有限数量的字符串表示为整数,然后使用较小的查找表进行转换?

关于java - 在 Java 中读取字典文件时内存过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30251265/

相关文章:

java - Java程序执行过程中在文件中保存大量字符串

swift - 如何提取 swift 3 字典的子集

java - 如何使用SVN在线备份代码

java - 如何在 Jackson 中反序列化多个嵌套元素?

java - 什么使用 libharu c++ 或我文本 java

java - 在Java中使用正则表达式多次匹配一个字符串

memory - 小内存模型和大内存模型有什么区别?

sql-server - 释放未使用的内存sql server 2014内存优化表

Python根据字典值获取字典键的加权平均值

java - 在 map 中搜索耗时过长的广度优先搜索策略