Well, you already have a key reading the comments you received.
Explanation of the problem:
Your log file is 400 MB in size. Please note that this is measured in bytes. Now you are reading it line by line with line = bufferedReader.readLine(), converting some bytes to a string.
A String Java a char[]. a char Java 2 ! , 800 . , JVM , , 1 .
, StringBuffer (: StringBuilder ) char[], ( ). . , 400 char[] 512 . : A char 2 .
, ? : !
:
class LogAnalyzer {
private final File logFile;
LogAnalyzer(File logFile) {
this.logFile = logFile;
}
void analyze() throws IOException {
try(FileReader fileReader = new FileReader(logFile)) {
try(BufferedReader bufferedReader = new BufferedReader(fileReader)) {
String line;
while ((line = bufferedReader.readLine()) != null) {
analyzeLine(line);
}
}
}
}
private void analyzeLine(String line) {
}
}
, LogAnalyzer / .