我有一个字典作为从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();
}