Develop Artifacts/Java

Java - 16. io nio

Files.readAllLines()가 파일이 10GB일 때 OOM을 내는 이유 — I/O 모델의 선택10GB 파일을 Files.readAllLines()로 읽었다. 파일이 작을 때는 잘 동작한다. 하지만 10GB 파일에서는 OutOfMemoryError가 발생한다 — 모든 줄을 메모리에 한 번에 올리기 때문이다. Files.lines()를 쓰면 한 줄씩 스트리밍으로 읽으므로 OOM 없이 처리할 수 있다. (Files API)10GB 파일을 읽었더니 OutOfMemoryError가 났다. 왜? 전체 파일을 메모리에 올렸기 때문이다. 이 글은 Files.lines()로 스트리밍 읽기를 하는 법, Path로 파일을 다루는 법, 그리고 레거시 java.io를 버려야 하는 이유를 풀어간다.java.io vs j..

Develop Artifacts/Java

Java - 13. stream

Stream 파이프라인에서 filter가 호출되지 않는 순간 — 지연 평가의 작동 원리list.stream() .filter(x -> { System.out.println("filter: " + x); return x > 5; }) .map(x -> { System.out.println("map: " + x); return x * 2; }) .findFirst();이 코드를 실행하면 전체 리스트를 순회하며 모든 요소에 filter와 map을 적용할까? — 아니다. 첫 번째로 조건을 만족하는 요소를 찾는 즉시 중단된다. findFirst()가 단 하나의 결과만 필요하므로, Stream은 그것만 계산한다. 이것이 지연 평가(lazy evaluation)다. (Stream API)지연 평가가 ..

Archive

'Stream' 2

Develop Artifacts/Java

Java - 16. io nio

Files.readAllLines()가 파일이 10GB일 때 OOM을 내는 이유 — I/O 모델의 선택10GB 파일을 Files.readAllLines()로 읽었다. 파일이 작을 때는 잘 동작한다. 하지만 10GB 파일에서는 OutOfMemoryError가 발생한다 — 모든 줄을 메모리에 한 번에 올리기 때문이다. Files.lines()를 쓰면 한 줄씩 스트리밍으로 읽으므로 OOM 없이 처리할 수 있다. (Files API)10GB 파일을 읽었더니 OutOfMemoryError가 났다. 왜? 전체 파일을 메모리에 올렸기 때문이다. 이 글은 Files.lines()로 스트리밍 읽기를 하는 법, Path로 파일을 다루는 법, 그리고 레거시 java.io를 버려야 하는 이유를 풀어간다.java.io vs j..

댓글
Develop Artifacts/Java

Java - 13. stream

Stream 파이프라인에서 filter가 호출되지 않는 순간 — 지연 평가의 작동 원리list.stream() .filter(x -> { System.out.println("filter: " + x); return x > 5; }) .map(x -> { System.out.println("map: " + x); return x * 2; }) .findFirst();이 코드를 실행하면 전체 리스트를 순회하며 모든 요소에 filter와 map을 적용할까? — 아니다. 첫 번째로 조건을 만족하는 요소를 찾는 즉시 중단된다. findFirst()가 단 하나의 결과만 필요하므로, Stream은 그것만 계산한다. 이것이 지연 평가(lazy evaluation)다. (Stream API)지연 평가가 ..

댓글

wall

방명록

방문 흔적을 남겨주세요. 질문이나 인사 모두 환영합니다.