9월, 2006의 게시물 표시

[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 미만의 파일을 읽을 때도 더 빠르다.