Kotlin VS Wasm benchmarks

Current benchmark data was generated on Mon May 19 2025, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][4 cores] AMD EPYC 7763 64-Core Processor (Model 1)

* -m in a file name stands for multi-threading or multi-processing

* -i in a file name stands for direct intrinsics usage. (Usage of simd intrinsics via libraries is not counted)

* -ffi in a file name stands for non-stdlib FFI usage

* (You may find time < time(user) + time(sys) for some non-parallelized programs, the overhead is from GC or JIT compiler, which are allowed to take advantage of multi-cores as that's more close to real-world scenarios.)

binarytrees

Input: 18

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 491ms 9.8ms 576.6MB 603ms 80ms kotlin/jvm 21
wasm 4.rs 1799ms 13ms 33.8MB 1780ms 10ms wasmtime 32.0.0
wasm 5.rs 1807ms 26ms 33.8MB 1787ms 3ms wasmtime 32.0.0
wasm 3.rs 1837ms 50ms 49.8MB 1807ms 17ms wasmtime 32.0.0
kotlin 1.kt 4175ms 24ms 143.7MB 4367ms 73ms kotlin/native 2.1.20

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 121ms 0.9ms 159.3MB 150ms 30ms kotlin/jvm 21
wasm 5.rs 170ms 0.4ms 19.8MB 157ms 0ms wasmtime 32.0.0
wasm 3.rs 172ms 3.8ms 21.7MB 160ms 0ms wasmtime 32.0.0
wasm 4.rs 172ms 1.7ms 19.7MB 160ms 0ms wasmtime 32.0.0
kotlin 1.kt 235ms 15ms 17.6MB 240ms 7ms kotlin/native 2.1.20

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 1141ms 15ms 20.2MB 1127ms 0ms wasmtime 32.0.0
kotlin 2-m.kt 1893ms 160ms 233.8MB 7030ms 100ms kotlin/jvm 21
kotlin 1.kt 2169ms 49ms 220.1MB 3017ms 67ms kotlin/jvm 21
kotlin 2-m.kt 4283ms 17ms 21.6MB 14280ms 553ms kotlin/native 2.1.20
kotlin 1.kt timeout 0.0ms 17.4MB 5517ms 30ms kotlin/native 2.1.20

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 83ms 1.7ms 18.3MB 70ms 0ms wasmtime 32.0.0
kotlin 2-m.kt 248ms 4.5ms 21.1MB 837ms 40ms kotlin/native 2.1.20
kotlin 1.kt 395ms 2.7ms 17.4MB 403ms 7ms kotlin/native 2.1.20
kotlin 1-m.kt 495ms 6.5ms 76.4MB 1130ms 40ms kotlin/jvm 21
kotlin 2-m.kt 920ms 72ms 97.4MB 3233ms 77ms kotlin/jvm 21

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 2.1ms 0.2ms 3.0MB 0ms 0ms kotlin/native 2.1.20
wasm 1.rs 6.8ms 0.2ms 18.0MB 0ms 0ms wasmtime 32.0.0
kotlin 1.kt 64ms 5.9ms 47.6MB 78ms 18ms kotlin/jvm 21

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 2-m.kt 1613ms 2795ms 455.2MB 15463ms 2483ms kotlin/jvm 21
kotlin 1.kt timeout 0.0ms 427.0MB 16450ms 2593ms kotlin/jvm 21

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1-m.kt 2080ms 193ms 220.2MB 5967ms 640ms kotlin/jvm 21
kotlin 2-m.kt 2084ms 210ms 242.8MB 5633ms 620ms kotlin/jvm 21

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1-m.kt 776ms 95ms 175.3MB 2097ms 80ms kotlin/jvm 21

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1-m.kt 1835ms 40ms 693.1MB 4310ms 167ms kotlin/jvm 21

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 89ms 0.7ms 17.5MB 77ms 0ms wasmtime 32.0.0
kotlin 2.kt 168ms 4.4ms 12.4MB 170ms 0ms kotlin/native 2.1.20
kotlin 1-m.kt 192ms 2.4ms 94.9MB 323ms 20ms kotlin/jvm 21
kotlin 2-m.kt 209ms 14ms 101.4MB 453ms 43ms kotlin/jvm 21
kotlin 1.kt 353ms 2.2ms 12.5MB 353ms 0ms kotlin/native 2.1.20

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 252ms 2.7ms 19.4MB 240ms 0ms wasmtime 32.0.0
kotlin 2-m.kt 313ms 0.5ms 214.0MB 540ms 50ms kotlin/jvm 21
kotlin 1.kt 340ms 2.2ms 203.2MB 463ms 37ms kotlin/jvm 21
kotlin 2.kt 474ms 3.0ms 12.4MB 500ms 7ms kotlin/native 2.1.20
kotlin 1.kt 1035ms 8.5ms 12.4MB 1070ms 0ms kotlin/native 2.1.20

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 47ms 0.6ms 17.9MB 33ms 0ms wasmtime 32.0.0
kotlin 2.kt 95ms 0.4ms 12.8MB 87ms 3ms kotlin/native 2.1.20
kotlin 1.kt 121ms 0.9ms 12.8MB 110ms 0ms kotlin/native 2.1.20
kotlin 1-m.kt 153ms 3.0ms 90.4MB 287ms 30ms kotlin/jvm 21
kotlin 2-m.kt 169ms 8.2ms 95.6MB 340ms 30ms kotlin/jvm 21

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 395ms 2.5ms 678.6MB 450ms 83ms kotlin/jvm 21
wasm 1.rs 901ms 10ms 43.7MB 873ms 10ms wasmtime 32.0.0
kotlin 1.kt 2036ms 172ms 90.1MB 2113ms 47ms kotlin/native 2.1.20

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1-m.kt 155ms 2.4ms 207.3MB 203ms 50ms kotlin/jvm 21
wasm 1.rs 197ms 2.6ms 23.7MB 180ms 0ms wasmtime 32.0.0
kotlin 1.kt 293ms 4.6ms 25.6MB 297ms 10ms kotlin/native 2.1.20

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1n.kt 353ms 3.9ms 3.6MB 343ms 0ms kotlin/native 2.1.20
wasm 1.rs 407ms 0.1ms 18.2MB 393ms 0ms wasmtime 32.0.0
kotlin 1.kt 445ms 1.8ms 49.2MB 490ms 20ms kotlin/jvm 21
wasm 2.rs 563ms 1.8ms 17.8MB 550ms 0ms wasmtime 32.0.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1n.kt 39ms 0.2ms 3.6MB 30ms 0ms kotlin/native 2.1.20
wasm 1.rs 49ms 0.9ms 18.0MB 40ms 0ms wasmtime 32.0.0
wasm 2.rs 65ms 1.2ms 18.1MB 53ms 0ms wasmtime 32.0.0
kotlin 1-m.kt 121ms 2.3ms 49.4MB 170ms 20ms kotlin/jvm 21

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 2153ms 20ms 19.1MB 2140ms 0ms wasmtime 32.0.0
kotlin 1.kt 3724ms 64ms 352.5MB 4500ms 100ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 26.3MB 3990ms 1497ms kotlin/native 2.1.20
kotlin 2n.kt timeout 0.0ms 30.6MB 5130ms 127ms kotlin/native 2.1.20

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 504ms 1.2ms 18.1MB 490ms 0ms wasmtime 32.0.0
kotlin 1-m.kt 1018ms 20ms 353.5MB 1703ms 90ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 26.7MB 3990ms 1510ms kotlin/native 2.1.20
kotlin 2n.kt timeout 0.0ms 30.6MB 5113ms 130ms kotlin/native 2.1.20

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt timeout 0.0ms 173.6MB 5407ms 47ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 226.8MB 5080ms 117ms kotlin/native 2.1.20

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1-m.kt 839ms 12ms 134.6MB 1270ms 40ms kotlin/jvm 21
kotlin 1n.kt 3231ms 31ms 51.1MB 3300ms 70ms kotlin/native 2.1.20

secp256k1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 3038ms 2.3ms 231.8MB 4063ms 77ms kotlin/jvm 21
wasm 1.rs 3424ms 13ms 17.6MB 3410ms 0ms wasmtime 32.0.0

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 862ms 4.0ms 17.6MB 850ms 0ms wasmtime 32.0.0
kotlin 1-m.kt 979ms 51ms 232.1MB 1937ms 67ms kotlin/jvm 21