我读了一本大小可能为 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/