java - 字符串的垃圾收集

标签 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 怎么样?

最佳答案

一旦超出范围,字符串本身就会被垃圾回收,这发生在 while 循环的每次迭代结束时。但从内存使用的角度来看,这是一个有争议的问题,因为您将此数据存储到映射中,该映射不会超出范围。

如果您提供有关如何使用此 map 的信息,也许可以给出一个解决方案,避免将所有内容存储在内存中。

关于java - 字符串的垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42136265/

相关文章:

java - sqlite DB 内带方括号的数据

json - 如何使用 Powershell 将 JSON 对象保存到文件中?

java - 为什么我在 TimeUnit 上得到一个编译器错误(不能从 long 转换为 Long)到一个日期,而如果我更改 java 编译器我就不再得到它

java - 如何使用java编程语言将附件添加到bugzilla中?

python - 将列表的字符串转换为列表

python - 如何仅当某个单词出现时才拆分列中的字符串?

java - 如何在java中获取目录和子目录中的所有文件的名称

c++ - C++使用套接字从URL下载文件

java - 字符串日期时间转换为 LocalDateTime 对象

java - 为什么扩展内部类的本地类不能访问内部类封闭实例?