Eager decode benchmark: SimdJson vs Jason

View Source

Source revision: 392ffd196312a5e40a0e74a0fa0ae1ef6e1bc361
Jason version: 1.4.5
Correctness acceptance: PASS

Both workflows fully materialize the same JSON input into equivalent Elixir terms. This benchmark measures eager decode/1; it does not measure bounded streaming or sparse projection. Each value is the median (p50) of 5 measured samples after 2 warmup samples.

FixtureInput bytesWorkflowLatency p50 (µs)Throughput (MiB/s)Reductions p50Caller memory delta p50 (bytes)Minor GCs p50
small24SimdJson.decode/1410.567500
small24Jason.decode/1122.8981720
medium16427SimdJson.decode/156627.687500
medium16427Jason.decode/1108145.0620532392080
large_array523344SimdJson.decode/12209122.2678720
large_array523344Jason.decode/1728568.5185174288331121
nested2584SimdJson.decode/110024.647500
nested2584Jason.decode/118136.91416592160
strings134001SimdJson.decode/1129329.887500
strings134001Jason.decode/1296431.731380831600000
numbers160860SimdJson.decode/1353343.427500
numbers160860Jason.decode/1302050.824213143433921
malformed5SimdJson.decode/1230.219400
malformed5Jason.decode/104.7761480

Caller memory delta is the non-negative difference between process memory immediately before and after the call. It is not a sampled peak and may be zero after garbage collection. Throughput and memory values are host- and allocator-contextual.