[Java] 자바에서의 File IO 성능

파일을 읽고 쓰는 것은 프로그래밍에서 아주 빈번하게 발생하는 일이다.

일반적인 통념 상 파일 시스템은 네트웍에 비해 훨씬 빠르고 메모리에 비해 훨씬 느리다. 보통 그 성능 비율은 100 정도로 유지가 되고 있다.

파일을 읽고 쓸 때의 성능을 보장하려면 다음 몇 가지 부분을 염두에 둬야 한다.

  • file open/close 가 빈번하게 발생하면 성능에 나쁜 영향을 미친다.
  • output stream flush가 빈번하게 발생하면 성능에 나쁜 영향을 미칠 수 있다. (file의 경우 윈도우에서는 거의 영향이 없었고, 리눅스의 경우 큰 영향이 있었다.)
  • stream io와 channel io를 단순 비교하면 stream io 성능이 오히려 나은 경우가 대부분이다.
  • buffered io를 사용하면 어느 정도의 성능 개선 효과를 보인다. (리눅스 output stream의 경우 아주 큰 개선 효과. 다른 경우에도 조금의 성능 개선 효과. 물론 최적의 buffer 크기를 잘 선택하는 것이 중요하다.)
  • memory map io를 사용하는 것이 단연 가장 빠르다. 심지어 1k 미만의 파일을 읽을 때도 더 빠르다.

댓글

이 블로그의 인기 게시물

[Java] Java G1 GC의 특성에 따른 Full GC 회피 튜닝 방법

엄밀한 사고(Critical Thinking)란 무엇일까

일론 머스크의 First Principle Thinking (제1원리 기반 사고)