Performance Benchmarks

Reproducible JMH benchmarks comparing Sheetz against Apache POI, EasyExcel, FastExcel, and Poiji.

All source code: sheetz-benchmarks


Write Performance (ms/op — lower is better)

Library 1K rows 10K rows 100K rows
FastExcel 6.48 31.95 309.70
EasyExcel 11.44 58.60 542.84
Sheetz 23.15 232.51 423.75
Apache POI 22.46 217.17 2,453.35

At small sizes (1K-10K rows), Sheetz and Apache POI are similar. At 100K rows, Sheetz is 5.8x faster because it automatically switches to SXSSF streaming.

Write Performance — 100K rows (ms/op, lower is better)

FastExcel   ||||||||                                309ms
Sheetz      ||||||||||                              423ms  <-- auto SXSSF
EasyExcel   |||||||||||||                           542ms
Apache POI  ||||||||||||||||||||||||||||||||||||||  2453ms

Read Performance (ms/op — lower is better)

Library 1K rows 10K rows 100K rows
FastExcel 2.43 24.88 210.17
EasyExcel 4.91 42.66 334.17
Apache POI 10.86 106.02 1,097.20
Poiji 12.26 114.92 1,042.16
Sheetz 13.18 128.35 1,285.89

Sheetz read speed is comparable to Apache POI and Poiji. The difference from FastExcel/EasyExcel is the cost of automatic type conversion, annotation processing, and validation — features those libraries do not provide.


Feature vs Performance Trade-off

Library Code Lines (R+W) Auto Types Validation Multi-Format
Sheetz 2 19 types Built-in xlsx/xls/csv/ods
Apache POI ~45 None None xlsx/xls
EasyExcel ~15 Basic None xlsx only
FastExcel ~33 None None xlsx only
Poiji ~1 (read) Basic None xlsx only

Methodology

Setting Value
Framework JMH 1.37
JVM JDK 11.0.30, OpenJDK 64-Bit Server VM
Hardware Apple Silicon (macOS)
Forks 2 separate JVM processes
Warmup 3 iterations, 1s each
Measurement 5 iterations, 1s each
Row counts 1,000 / 10,000 / 100,000
Data Fixed random seed for reproducibility
Format .xlsx (OOXML) for all libraries

Results vary by JVM, OS, and hardware. Run the benchmarks yourself to get numbers for your environment.


When to Choose Each Library