我不是 java 专家。
我的代码正在将文件读入 String
。此代码每 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();
}
}
最佳答案
Hello, I am not java expert.
每个人都有可以学习的东西。
My code is reading a file into a String, This code gets executed every 5 minutes. Now Sometime file size of 100 lines sometimes 1000 lines.
听起来不是很大或很频繁。应该没有问题。
I am experience Out Of Memory, after some days.
您应该能够获得堆转储并查看内存不足的位置以及原因。
Question I have is, When my codes goes out of scope of the Reading file Function. Does Java Garbage collect the String .
当它不再通过强引用访问时,可以收集它。
I am pretty confuse by reading on internet some says it does not get deleted and use StringBuffer
听起来您来对地方了。没听说过。
关于Java 字符串内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6072153/