字符串的垃圾收集

时间:2017-02-09 12:04:01

标签: java string file garbage-collection

我有一个文本文件,我需要逐行阅读并在每一行上进行一些处理。

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呢?

1 个答案:

答案 0 :(得分:3)

字符串本身一旦超出范围就会被垃圾收集,这发生在while循环的每次迭代结束时。但从内存使用的角度来看,这是一个没有实际意义的问题,因为您将这些数据存储到超出范围的地图中。

如果您包含有关如何使用此地图的信息,可能会给出一个解决方案,避免将所有内容存储在内存中。