Я задавал подобный вопрос раньше: Утечка памяти в строке Java
Но я не был уверен, что спросить:
Вот еще один фрагмент кода, который я написал:
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class TestString {
public static int readLineXX(BufferedReader br) throws Exception {
String s = br.readLine();
if ( s == null ) return 0;
return 1;
}
public static void main(String args[]) {
while (true) {
try {
FileInputStream fstream = new FileInputStream("bigfile.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
while ( readLineXX (br)!= 0) {
//System.out.print(".");
}
br.close();
in.close();
fstream.close();
} catch (Exception e) {
}
}
}
}
Поскольку строка в Java неизменна, String s
будет собирать мусор.
Я долго запускал этот код, используя опции -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails
, он работает нормально.
Это небольшой фрагмент моего основного приложения, в котором, как мне кажется, есть утечка и причина OOM
.
bigfile.txt
около 1GB
.