Java:如何在不膨胀字符串池的情况下读取文件?

问题描述 投票:-2回答:1

请看下面的代码片段:

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'变量中。由于“行”的类型为字符串,因此其内容存储在字符串池中。Java垃圾收集器不会收集存储在字符串池中的字符串,并且在程序的整个生命周期中都将其保留在那里。

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

java garbage-collection jvm string-pool
1个回答
0
投票
默认情况下,只有字符串文字存储在SpringPool中,否则,您将调用String对象的.interm()方法。

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

© www.soinside.com 2019 - 2024. All rights reserved.