我不是Java专家。
我的代码将文件读入一个字符串。这段代码每5分钟执行一次。 文件的大小不同。有时是100行,有时是1000行。
几天后,我遇到了内存不足的问题。
我的问题是,当我的代码超出了“读取文件函数”的范围时,Java是否会回收字符串?
我在网上阅读了很多信息,感到非常困惑。有些人说它不会被删除,建议使用StringBuffer。
我的代码将文件读入一个字符串。这段代码每5分钟执行一次。 文件的大小不同。有时是100行,有时是1000行。
几天后,我遇到了内存不足的问题。
我的问题是,当我的代码超出了“读取文件函数”的范围时,Java是否会回收字符串?
我在网上阅读了很多信息,感到非常困惑。有些人说它不会被删除,建议使用StringBuffer。
// Demonstrate FileReader.
import java.io.*;
class FileReaderDemo {
public static void read(BufferedReader br) throws Exception {
long length = 0;
String s;
while (true) {
s = br.readLine();
s += "abcd";
if (s == null) {
break;
}
length += s.length();
//System.out.println(s);
}
System.out.println("Read: " + (length / 1024 / 1024) + " MB");
}
public static void main(String args[]) throws Exception {
//FileReader fr = new FileReader("FileReaderDemo.java");
FileReader fr = new FileReader("big_file.txt.1");
BufferedReader br = new BufferedReader(fr);
String s;
read(br);
fr = new FileReader("big_file.txt.1");
br = new BufferedReader(fr);
read(br);
fr = new FileReader("big_file.txt.1");
br = new BufferedReader(fr);
read(br);
fr = new FileReader("big_file.txt.1");
br = new BufferedReader(fr);
read(br);
BufferedReader in = new BufferedReader(new InputStreamReader(System. in )); in .readLine();
fr.close();
}
}
s
在检查它时从未为null,因为他将“abcd”添加到它。我以为它会抛出异常,但显然它变成了“nullabcd”。 - DHall