请看下面的代码片段:
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?我只是将文件行存储为任何对象,这意味着它在不需要时将从堆中删除。
在上面的示例中,变量'line'是一个字符串对象,并且不是StringPool的一部分。您使用了字符串文字“ myfile.txt”,它将作为StringPool的一部分。