我有一个字典作为从2M单词到50k单词的文本文件映射。我将此文件加载到内存中,方法HashMap<String, String>是逐行读取文件,在分隔符上拆分并调用myMap.put(line[0], line[1]). 文本文件的大小为45MB,而 HashMap 使用350MB堆。我的目标是在不损害查找速度的情况下减少内存使用。
myMap.values().size()返回2M而不是50k,表明这些值存储为重复项。有没有办法让相同的值指向同一个 String 对象?
Map<String, String> dict = new HashMap<>();
try (FileReader fr = new FileReader(FILE);
BufferedReader br = new BufferedReader(fr)) {
String line;
while ((line = br.readLine()) != null) {
String key_value[] = line.split(":");
dict.put(key_value[0], key_value[1].intern());
}
} catch (Exception e) {
e.printStackTrace();
}