2016-09-13 2 views
3

을 많이 사용의 BufferedReader 내가 매우 큰 파일 (~ 100g)에 BufferedReader로하고을 FileReader를 사용 RAM

이 낮은 메모리를 사용 처음에
BufferedReader reader = new BufferedReader(new FileReader("file path")); 
BufferedWriter writer = new BufferedWriter(new FileWriter("output file")); 
String line; 
while ((line = reader.readLine()) != null) { 
    // check if i need this line, and if i need it, i print it 
    writer.write(line); 
    writer.newLine(); 
} 
writer.close(); 
reader.close(); 

난 내 파일에이 소스를 실행하지만, 천천히 사용 된 메모리가 커집니다 (50g 이상의 RAM을 쉽게 사용할 수 있음).

왜 그렇게 생겼습니까? 내가 고칠 수 있을까?

+2

당신이 라인 뭐하는거야? –

+0

@JonSkeet 질문을 업데이트합니다. 나는 각 줄을 가져 와서 탭으로 구분하고 (내 파일은 탭으로 구분),이 줄이 필요한지 확인하기 위해 출력 파일에 BufferedWriter로 출력한다. – ldoroni

+0

그럼 어디서나 * 절약 할 수 없습니까? 여러분이 제시 한 코드를 사용하면 가비지 컬렉터가 문제없이 처리 할 수있을 것이라고 기대합니다. 파일에 커다란 개별 줄 *이 없으면 말입니다. –

답변

0

-Xmx 매개 변수가있는 명령 줄에서 Linux에서 Java 프로그램을 실행할 때 어떤 이유로 Java 프로그램이 RAM을 많이 사용해야한다는 것을 알았습니다.

-Xmx 매개 변수를 제거한 시점부터 Java 프로그램이 메모리를 적게 사용합니다.


이 내 이전 명령 :이 나의 새로운 명령입니다

java -Xmx350g -jar MyJar.jar 

:

java -jar MyJar.jar 
+0

나는 350g를 JVM에 할당하는 것이 가능하다는 것을 알지 못했다 ... 또한 가비지 컬렉터는 특정 공간의 %가 채워진 후에 시작됩니다. – Asoub

+1

@ Aspect 강력한 서버에서 실행하므로 512g의 RAM이 있으면 350g을 할당하면 안됩니다. 그리고 나는 당신이 가비지 컬렉터에 대해 옳을 수도 있다고 생각하지만, 나는 정말로 모른다. – ldoroni