我有一个文本文件,我需要逐行阅读并在每一行上进行一些处理。
ConcurrentMap<String, String> hm = new ConcurrentHashMap<>();
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("filename.txt");
InputStreamReader stream = new InputStreamReader(is, StandardCharsets.UTF_8);
BufferedReader reader = new BufferedReader(stream);
while(true)
{
line = reader.readLine();
if (line == null) {
break;
}
String text = line.substring(0, line.lastIndexOf(",")).trim();
String id = line.substring(line.lastIndexOf(",") + 1).trim();
hm.put(text,id);
}
我需要知道,substring()
和trim()
操作期间创建的字符串什么时候会被垃圾回收?
另外,字符串line
呢?
答案 0 :(得分:3)
字符串本身一旦超出范围就会被垃圾收集,这发生在while
循环的每次迭代结束时。但从内存使用的角度来看,这是一个没有实际意义的问题,因为您将这些数据存储到不超出范围的地图中。
如果您包含有关如何使用此地图的信息,可能会给出一个解决方案,避免将所有内容存储在内存中。