Wasm VS Java benchmarks

Current benchmark data was generated on Tue Apr 01 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
java 2.java 463ms 0.8ms 576.3MB 547ms 97ms openjdk 21
java 2-m.java 465ms 3.0ms 643.3MB 647ms 120ms graal/jvm 17.0.8
java 2.java 474ms 2.2ms 624.4MB 590ms 93ms openjdk 23
java 2.java 1249ms 22ms 1096.2MB 580ms 837ms openjdk/zgc 21
wasm 5.rs 1809ms 60ms 33.1MB 1790ms 7ms wasmtime 31.0.0
wasm 3.rs 1854ms 16ms 49.2MB 1827ms 17ms wasmtime 31.0.0
wasm 4.rs 1863ms 11ms 33.2MB 1840ms 10ms wasmtime 31.0.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2.java 126ms 3.1ms 167.2MB 157ms 30ms openjdk 21
java 2-m.java 128ms 4.5ms 98.8MB 163ms 30ms openjdk 23
java 2-m.java 149ms 6.5ms 224.4MB 223ms 57ms graal/jvm 17.0.8
wasm 5.rs 174ms 4.1ms 19.3MB 157ms 0ms wasmtime 31.0.0
wasm 3.rs 180ms 2.4ms 21.1MB 163ms 0ms wasmtime 31.0.0
wasm 4.rs 181ms 4.0ms 19.2MB 163ms 0ms wasmtime 31.0.0
java 2.java 313ms 5.1ms 241.8MB 160ms 210ms openjdk/zgc 21

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 1133ms 6.8ms 19.4MB 1117ms 0ms wasmtime 31.0.0
java 1-m.java 2369ms 239ms 257.6MB 8973ms 137ms openjdk 21
java 1-m.java 2440ms 133ms 242.6MB 9250ms 147ms openjdk 23
java 1-m.java 3165ms 194ms 1248.2MB 10320ms 1190ms openjdk/zgc 21

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 82ms 1.6ms 17.7MB 70ms 0ms wasmtime 31.0.0
java 1-m.java 474ms 13ms 92.7MB 1553ms 60ms openjdk 23
java 1-m.java 482ms 35ms 122.2MB 1600ms 70ms openjdk 21
java 1-m.java 665ms 22ms 214.5MB 1780ms 247ms openjdk/zgc 21

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 421ms 7.8ms 18.6MB 403ms 3ms wasmtime 31.0.0
java 1-m.java 599ms 4.3ms 354.2MB 1150ms 117ms graal/jvm 17.0.8
java 1-m.java 634ms 43ms 266.3MB 1703ms 67ms openjdk 21
java 1-m.java 657ms 59ms 261.5MB 1740ms 83ms openjdk 23
java 1-m.java 997ms 4.6ms 529.0MB 1707ms 430ms openjdk/zgc 21

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 115ms 2.6ms 18.0MB 103ms 0ms wasmtime 31.0.0
java 1-m.java 303ms 7.2ms 226.0MB 597ms 67ms graal/jvm 17.0.8
java 1-m.java 382ms 15ms 179.0MB 1037ms 57ms openjdk 21
java 1-m.java 387ms 8.5ms 111.7MB 1057ms 53ms openjdk 23
java 1-m.java 549ms 3.9ms 215.3MB 1083ms 230ms openjdk/zgc 21

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 899ms 11ms 95.9MB 3313ms 40ms graal/jvm 17.0.8
java 1-m.java 955ms 65ms 49.0MB 3507ms 23ms openjdk 21
java 1-m.java 988ms 5.4ms 50.3MB 3637ms 27ms openjdk 23
java 1-m.java 1035ms 2.7ms 45.8MB 3383ms 150ms openjdk/zgc 21
wasm 1.rs 4154ms 12ms 16.7MB 4137ms 0ms wasmtime 31.0.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 177ms 4.1ms 48.6MB 473ms 27ms openjdk 21
java 1-m.java 194ms 12ms 95.8MB 533ms 37ms graal/jvm 17.0.8
java 1-m.java 199ms 4.2ms 50.1MB 520ms 23ms openjdk 23
java 1-m.java 310ms 7.3ms 46.1MB 520ms 140ms openjdk/zgc 21
wasm 1.rs 353ms 4.0ms 17.2MB 340ms 0ms wasmtime 31.0.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 237ms 2.6ms 17.5MB 223ms 3ms wasmtime 31.0.0
java 4-m.java 447ms 11ms 101.5MB 637ms 40ms graal/jvm 17.0.8
java 4.java 460ms 1.3ms 49.2MB 550ms 20ms openjdk 23
java 4.java 461ms 3.8ms 47.6MB 547ms 20ms openjdk 21
java 4.java 578ms 7.4ms 45.3MB 540ms 147ms openjdk/zgc 21

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 32ms 0.9ms 17.3MB 20ms 0ms wasmtime 31.0.0
java 4-m.java 128ms 4.4ms 93.9MB 177ms 40ms graal/jvm 17.0.8
java 4.java 128ms 3.4ms 46.2MB 167ms 20ms openjdk 21
java 4.java 129ms 1.5ms 48.3MB 170ms 20ms openjdk 23
java 4.java 249ms 1.9ms 43.7MB 170ms 140ms openjdk/zgc 21

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 7.3ms 1.3ms 17.4MB 0ms 0ms wasmtime 31.0.0
java 1.java 64ms 1.4ms 52.8MB 66ms 20ms graal/jvm 17.0.8
java 1.java 68ms 2.2ms 43.7MB 78ms 18ms openjdk 21
java 1.java 73ms 6.0ms 44.7MB 76ms 18ms openjdk 23
java 1.java 195ms 5.0ms 43.0MB 86ms 138ms openjdk/zgc 21

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 90ms 0.5ms 17.4MB 80ms 0ms wasmtime 31.0.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 255ms 5.4ms 16.9MB 240ms 0ms wasmtime 31.0.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 48ms 1.5ms 17.4MB 37ms 0ms wasmtime 31.0.0

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 8.rs 832ms 8.8ms 20.3MB 817ms 0ms wasmtime 31.0.0
java 1b.java 1153ms 7.9ms 55.4MB 1257ms 23ms openjdk 23
java 1b.java 1157ms 8.0ms 54.2MB 1260ms 23ms openjdk 21
java 1b.java 1195ms 40ms 109.9MB 1393ms 43ms graal/jvm 17.0.8
java 1.java 1264ms 8.1ms 130.0MB 1383ms 43ms graal/jvm 17.0.8
java 1b.java 1276ms 14ms 50.9MB 1250ms 150ms openjdk/zgc 21
java 1a.java 1659ms 2.3ms 55.5MB 1753ms 27ms openjdk 23
java 1a.java 1661ms 3.2ms 55.0MB 1760ms 23ms openjdk 21
java 1a.java 1682ms 2.7ms 102.0MB 1793ms 40ms graal/jvm 17.0.8
java 1.java 1715ms 1.3ms 266.8MB 1787ms 50ms openjdk 21
java 1.java 1716ms 5.3ms 309.7MB 1780ms 53ms openjdk 23
java 1a.java 1793ms 9.1ms 51.8MB 1763ms 150ms openjdk/zgc 21
java 1.java 2387ms 4.4ms 832.3MB 1797ms 700ms openjdk/zgc 21
java 2.java timeout 0.0ms 641.9MB 5290ms 123ms openjdk 21
java 2.java timeout 0.0ms 887.3MB 5270ms 137ms openjdk 23
java 2.java timeout 0.0ms 3306.3MB 3353ms 2010ms openjdk/zgc 21

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 8.rs 43ms 1.1ms 17.4MB 30ms 0ms wasmtime 31.0.0
java 1b-m.java 187ms 7.0ms 49.6MB 280ms 30ms openjdk 21
java 1b-m.java 189ms 10ms 50.5MB 293ms 27ms openjdk 23
java 1a-m.java 191ms 3.6ms 50.7MB 297ms 20ms openjdk 21
java 1a-m.java 193ms 4.4ms 51.9MB 297ms 23ms openjdk 23
java 1-m.java 195ms 11ms 110.7MB 307ms 43ms graal/jvm 17.0.8
java 1-m.java 195ms 1.4ms 81.8MB 277ms 23ms openjdk 21
java 1-m.java 196ms 11ms 86.9MB 270ms 30ms openjdk 23
java 1a-m.java 205ms 3.1ms 98.0MB 307ms 37ms graal/jvm 17.0.8
java 1b-m.java 219ms 16ms 101.9MB 370ms 40ms graal/jvm 17.0.8
java 1a.java 316ms 4.9ms 48.6MB 290ms 147ms openjdk/zgc 21
java 1b.java 319ms 1.4ms 47.6MB 310ms 143ms openjdk/zgc 21
java 1.java 339ms 4.4ms 114.3MB 273ms 163ms openjdk/zgc 21
java 2-m.java 570ms 16ms 655.1MB 853ms 93ms openjdk 21
java 2-m.java 585ms 14ms 789.4MB 853ms 123ms openjdk 23
java 2.java 1661ms 61ms 1407.9MB 860ms 1103ms openjdk/zgc 21

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 403ms 6.5ms 679.3MB 460ms 100ms openjdk 21
java 1.java 404ms 6.2ms 543.6MB 507ms 87ms openjdk 23
java 1-m.java 415ms 10ms 628.4MB 613ms 107ms graal/jvm 17.0.8
wasm 1.rs 939ms 69ms 41.1MB 913ms 13ms wasmtime 31.0.0
java 1.java 1081ms 7.3ms 969.4MB 447ms 757ms openjdk/zgc 21

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 168ms 0.6ms 158.6MB 250ms 40ms openjdk 23
java 1-m.java 170ms 0.4ms 206.2MB 240ms 50ms openjdk 21
wasm 1.rs 201ms 2.9ms 23.2MB 183ms 0ms wasmtime 31.0.0
java 1-m.java 218ms 17ms 253.4MB 360ms 60ms graal/jvm 17.0.8
java 1.java 426ms 21ms 342.0MB 217ms 290ms openjdk/zgc 21

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 413ms 2.3ms 17.1MB 400ms 0ms wasmtime 31.0.0
java 1.java 448ms 1.9ms 45.3MB 487ms 20ms openjdk 21
java 1.java 448ms 1.6ms 48.3MB 480ms 20ms openjdk 23
java 1.java 449ms 6.6ms 81.5MB 477ms 30ms graal/jvm 17.0.8
java 1.java 566ms 4.0ms 44.5MB 483ms 137ms openjdk/zgc 21
wasm 2.rs 587ms 3.1ms 17.0MB 573ms 0ms wasmtime 31.0.0
java 2.java 1270ms 4.1ms 792.6MB 1393ms 103ms openjdk 23
java 2.java 1288ms 52ms 595.9MB 1420ms 83ms openjdk 21
java 2.java 3257ms 134ms 2431.0MB 1623ms 1843ms openjdk/zgc 21

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 50ms 1.6ms 17.1MB 37ms 0ms wasmtime 31.0.0
wasm 2.rs 67ms 0.7ms 17.4MB 53ms 0ms wasmtime 31.0.0
java 1-m.java 119ms 1.7ms 81.7MB 147ms 33ms graal/jvm 17.0.8
java 1.java 121ms 1.4ms 45.2MB 160ms 20ms openjdk 21
java 1.java 124ms 7.2ms 48.2MB 160ms 20ms openjdk 23
java 1.java 248ms 4.1ms 44.9MB 170ms 140ms openjdk/zgc 21
java 2-m.java 301ms 9.8ms 387.1MB 443ms 53ms openjdk 21
java 2-m.java 314ms 3.1ms 416.0MB 453ms 70ms openjdk 23
java 2.java 692ms 5.9ms 525.1MB 467ms 410ms openjdk/zgc 21

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 376ms 5.1ms 22.0MB 360ms 0ms wasmtime 31.0.0
java 1.java 423ms 4.3ms 114.8MB 473ms 23ms openjdk 21
java 1.java 469ms 27ms 118.4MB 513ms 20ms openjdk 23
wasm 1.rs 510ms 12ms 56.1MB 493ms 0ms wasmtime 31.0.0
java 1.java 606ms 18ms 112.9MB 513ms 167ms openjdk/zgc 21
java 1-m.java 613ms 10ms 237.4MB 893ms 70ms graal/jvm 17.0.8
java 2.java 783ms 4.9ms 60.5MB 840ms 20ms openjdk 23
java 2.java 785ms 1.0ms 56.8MB 840ms 23ms openjdk 21
java 2.java 900ms 86ms 53.4MB 833ms 140ms openjdk/zgc 21
java 2-m.java 1356ms 37ms 256.2MB 2440ms 100ms graal/jvm 17.0.8

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 99ms 4.3ms 27.0MB 83ms 0ms wasmtime 31.0.0
wasm 2.rs 100ms 2.4ms 18.4MB 83ms 7ms wasmtime 31.0.0
java 1.java 157ms 4.9ms 68.4MB 207ms 23ms openjdk 23
java 1.java 168ms 7.3ms 64.9MB 223ms 27ms openjdk 21
java 1-m.java 214ms 16ms 124.6MB 300ms 47ms graal/jvm 17.0.8
java 2.java 259ms 4.6ms 50.0MB 317ms 23ms openjdk 21
java 2.java 264ms 0.8ms 50.4MB 317ms 17ms openjdk 23
java 1.java 289ms 0.6ms 61.4MB 210ms 150ms openjdk/zgc 21
java 2.java 369ms 3.1ms 47.4MB 303ms 140ms openjdk/zgc 21
java 2-m.java 473ms 4.4ms 145.8MB 837ms 63ms graal/jvm 17.0.8

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 2211ms 7.5ms 18.2MB 2197ms 0ms wasmtime 31.0.0
java 1.java 3228ms 17ms 443.5MB 3663ms 97ms graal/jvm 17.0.8
java 1.java 3745ms 13ms 432.2MB 4617ms 123ms openjdk 23
java 1.java 3749ms 15ms 432.6MB 4667ms 110ms openjdk 21
java 1.java timeout 0.0ms 1935.8MB 4717ms 1170ms openjdk/zgc 21

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 531ms 6.4ms 17.6MB 513ms 0ms wasmtime 31.0.0
java 1.java 888ms 9.3ms 445.3MB 1240ms 80ms graal/jvm 17.0.8
java 1-m.java 1037ms 26ms 352.0MB 1820ms 103ms openjdk 21
java 1-m.java 1052ms 11ms 383.3MB 1800ms 100ms openjdk 23
java 1.java 2087ms 5.4ms 1391.0MB 1783ms 1130ms openjdk/zgc 21

secp256k1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 3610ms 3.0ms 16.9MB 3597ms 0ms wasmtime 31.0.0

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 910ms 1.5ms 16.8MB 897ms 0ms wasmtime 31.0.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 1997ms 10ms 47.8MB 7620ms 23ms openjdk 21
java 2-m.java 2004ms 6.8ms 48.5MB 7647ms 23ms openjdk 23
java 2-m.java 2106ms 19ms 45.5MB 7530ms 147ms openjdk/zgc 21
java 2-m.java 2510ms 37ms 95.1MB 9387ms 50ms graal/jvm 17.0.8
wasm 2.rs 3602ms 4.5ms 16.9MB 3587ms 0ms wasmtime 31.0.0
wasm 7.rs 4912ms 16ms 16.9MB 4897ms 0ms wasmtime 31.0.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 608ms 11ms 49.1MB 2147ms 23ms openjdk 23
java 2-m.java 610ms 7.9ms 47.8MB 2153ms 23ms openjdk 21
java 2-m.java 729ms 4.6ms 45.4MB 2143ms 150ms openjdk/zgc 21
java 2-m.java 762ms 11ms 93.2MB 2673ms 43ms graal/jvm 17.0.8
wasm 2.rs 910ms 0.9ms 16.7MB 897ms 0ms wasmtime 31.0.0
wasm 7.rs 1240ms 9.5ms 16.9MB 1230ms 0ms wasmtime 31.0.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 235ms 1.1ms 17.2MB 220ms 0ms wasmtime 31.0.0
java 2-m.java 253ms 8.5ms 48.1MB 743ms 23ms openjdk 21
java 2-m.java 267ms 10ms 48.9MB 800ms 27ms openjdk 23
java 2-m.java 298ms 25ms 94.0MB 890ms 37ms graal/jvm 17.0.8
wasm 7.rs 321ms 11ms 16.8MB 307ms 0ms wasmtime 31.0.0
java 2-m.java 383ms 1.6ms 45.6MB 763ms 147ms openjdk/zgc 21