-2

请看下面的代码片段:

public static void main(String[] args) {
        BufferedReader reader;
        try {
            reader = new BufferedReader(new FileReader(
                    "myfile.txt"));
            String line = reader.readLine();
            while (line != null) {
                System.out.println(line);
                // read next line
                line = reader.readLine();
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

如您所见,文件的每一行都被读取并存储在“line”变量中。由于 'line' 是字符串类型,它的内容存储在字符串池中。存储在字符串池中的字符串不会被 Java 垃圾收集器收集,而是在程序的整个生命周期内都保留在那里。

如果文件非常大,字符串池可能会膨胀。您知道如何在将所有行都存储在字符串池中的情况下读取文件吗?我只是将文件行存储为任何对象,这意味着它会在不需要时从堆中删除。

4

1 回答 1

1

默认情况下,只有字符串文字存储到 SpringPool 中,除非您调用 String 对象的 .interm() 方法。

在上面的示例中,变量“line”是一个字符串对象,不是 StringPool 的一部分。您使用了字符串文字“myfile.txt”,它将成为 StringPool 的一部分

于 2019-12-05T02:27:54.593 回答