자바에서의 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 G1 GC의 특성에 따른 Full GC 회피 튜닝 방법

Heap Dump 분석을 통한 Perm Area Memory Leak 원인 진단

맥북프로 13인치 2010년 버전의 하드웨어 업그레이드 산전수전 경험기