급격한 성능 저하.
celper의 경우 record 단위로 파싱 이후 field 단위 파싱으로 char[]를 넘긴다. 이 과정에서 시간 복잡도 O(n^2)을 가진다. 이 때문에 buffer는 최적화 되었지만 연산 속도가 매우 낮아진 것으로 측정된다.
O(n)으로 변경해야한다.
1.
InternalBuffer 변경
2.
RecordParser, FieldParser 두 가지 병합
3.
상태 패턴 도입으로 field 단위 파싱 및 reocrd 단위 파싱 결합
Benchmark Mode Cnt Score Error Units
CelperComparerJMH.celperCsvReader3 avgt 10 1.892 ± 0.090 s/op
CelperComparerJMH.celperCsvReader3:·gc.alloc.rate avgt 10 465.492 ± 21.475 MB/sec
CelperComparerJMH.celperCsvReader3:·gc.alloc.rate.norm avgt 10 964923349.893 ± 6.715 B/op
CelperComparerJMH.celperCsvReader3:·gc.churn.G1_Eden_Space avgt 10 458.267 ± 14.387 MB/sec
CelperComparerJMH.celperCsvReader3:·gc.churn.G1_Eden_Space.norm avgt 10 950495696.213 ± 39793994.604 B/op
CelperComparerJMH.celperCsvReader3:·gc.churn.G1_Survivor_Space avgt 10 5.439 ± 5.260 MB/sec
CelperComparerJMH.celperCsvReader3:·gc.churn.G1_Survivor_Space.norm avgt 10 11307144.533 ± 11040353.204 B/op
CelperComparerJMH.celperCsvReader3:·gc.count avgt 10 149.000 counts
CelperComparerJMH.celperCsvReader3:·gc.time avgt 10 23341.000 ms
CelperComparerJMH.fastCsvReader avgt 10 1.521 ± 0.137 s/op
CelperComparerJMH.fastCsvReader:·gc.alloc.rate avgt 10 562.251 ± 49.232 MB/sec
CelperComparerJMH.fastCsvReader:·gc.alloc.rate.norm avgt 10 937021069.214 ± 5.609 B/op
CelperComparerJMH.fastCsvReader:·gc.churn.G1_Eden_Space avgt 10 555.480 ± 45.463 MB/sec
CelperComparerJMH.fastCsvReader:·gc.churn.G1_Eden_Space.norm avgt 10 926069867.276 ± 28458695.235 B/op
CelperComparerJMH.fastCsvReader:·gc.churn.G1_Survivor_Space avgt 10 3.559 ± 5.222 MB/sec
CelperComparerJMH.fastCsvReader:·gc.churn.G1_Survivor_Space.norm avgt 10 5756557.410 ± 8184784.166 B/op
CelperComparerJMH.fastCsvReader:·gc.count avgt 10 179.000 counts
CelperComparerJMH.fastCsvReader:·gc.time avgt 10 29280.000 ms
Java
복사