Search

2025-02-04

fastCSV - CSVBuffer 분석
일반적으로 운영체제의 메모리 할당 단위인 page는 4KB(4,096 bytes)임.
이를 이용하여 page 낭비 없이 배수로 증가시킴. 그래서 *2의 형태로 제작됨. 즉, 단순히 두 배수로 증가 시키는 것이 아닌 페이지에 적정 사이즈로 증가시킴.
page 경계를 맞춤으로 단편화를 줄임.
이 때문에 메모리가 히트가 높아짐.
단일 버퍼를 이용한 방식으로 celper의 이중 버퍼(buf, row)를 활용한 방식보다 arraycopy가 1회 적게 발생함.
READ_SIZE를 일정하게 유지함으로 jvm 코드 최적화가 잘 이루어짐
extendsAndRelocate(char[] buf, int begin) 메서드가 static으로 제작한 이유는 CsvBuffer 내부에서 사용하는 메서드 임에도 불구하고 CsvBuffer 내부에서 사용하는 buf와의 의존성을 줄이기 위하여 static으로 제작
따로 내부 버퍼의 size를 지정할 수 없도록 한 이유는 os의 page 크기를 최적화 하기 위하여 임의로 커스텀하지 못하게 고정해 놓음.