2016-08-30 2 views
-4

Files.readAllLines을 사용하여 약 2,000 개의 텍스트 파일을 읽었지만 100MB를 소비합니다.많은 파일을 읽는 동안 성능 문제가 발생합니다.

여기 코드는 JVM은 100MB의 복용 + 2000 파일을 읽을 수있다

Charset charset = Charset.forName("ISO-8859-1"); 
try { 
    Files.readAllLines(Paths.get(fileName), charset); 
} catch (Exception e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

스 니펫입니다. (JVisualVM으로 확인) 내가 여기서 뭐 잘못하고 있니?

+2

모든 파일을 원하십니까? 아니면 하나씩 처리 할 수 ​​있습니까? 귀하의 요구 사항에 따라 다릅니다. 현명하게 선택하고 적절한 방법을 선택하여 파일을 읽습니다. –

+0

일괄 작업을 고려하십시오. – Pawan

+0

JVM이 실제로 필요한 것보다 많은 메모리를 차지할 수 있습니다. -Xmx와 같은 JVM 인수를 통해 조정할 수 있습니다. –

답변

1

음, 1000 개의 텍스트 파일이 있습니다. 코드가이 모든 것을 메모리에 읽어들입니다. 따라서 문자열이있는 많은 목록이 만들어집니다.

모든 것을 원하지 않는다면 왜 파일을 메모리로 읽는 방법을 사용하고 있습니까?

또는 구체적인 대답을 할 : 코드는 괜찮습니다 (물론, 가정 실제 코드는 모든 파일을 읽을 너무 많은 이해가되지 것처럼

List<String> allTheLines = Files... 

같은 것을 가지고 있음

그런 의미에서 실제로 할 수있는 일은 많지 않습니다. 실제로 원하지 않는 경우가 아니면 모든 행을 메모리에 저장하면 흥미로운 방법이 있습니다. 그 일부는 Java8 코드를 보시오.

관련 문제