Java VS Wasm benchmarks

Current benchmark data was generated on Thu May 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 458ms 2.1ms 574.1MB 557ms 83ms openjdk 21
java 2.java 472ms 4.2ms 620.6MB 573ms 107ms openjdk 23
java 2-m.java 478ms 13ms 644.0MB 667ms 127ms graal/jvm 17.0.8
java 2.java 1199ms 18ms 1054.6MB 590ms 770ms openjdk/zgc 21
wasm 5.rs 1774ms 4.7ms 33.7MB 1757ms 7ms wasmtime 32.0.0
wasm 3.rs 1818ms 20ms 49.7MB 1790ms 13ms wasmtime 32.0.0
wasm 4.rs 1821ms 4.3ms 33.8MB 1803ms 7ms wasmtime 32.0.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 124ms 1.9ms 98.4MB 163ms 30ms openjdk 23
java 2-m.java 127ms 2.5ms 167.1MB 160ms 30ms openjdk 21
java 2-m.java 144ms 4.4ms 215.0MB 210ms 60ms graal/jvm 17.0.8
wasm 5.rs 170ms 2.0ms 19.7MB 160ms 0ms wasmtime 32.0.0
wasm 4.rs 177ms 2.1ms 19.7MB 163ms 0ms wasmtime 32.0.0
wasm 3.rs 180ms 5.3ms 21.7MB 163ms 0ms wasmtime 32.0.0
java 2.java 305ms 0.9ms 241.8MB 150ms 207ms openjdk/zgc 21

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 421ms 3.5ms 19.4MB 407ms 0ms wasmtime 32.0.0
java 1-m.java 581ms 19ms 279.4MB 1593ms 77ms openjdk 21
java 1-m.java 614ms 20ms 395.5MB 1180ms 120ms graal/jvm 17.0.8
java 1-m.java 646ms 62ms 236.6MB 1720ms 80ms openjdk 23
java 1-m.java 958ms 42ms 533.5MB 1653ms 420ms openjdk/zgc 21

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 115ms 2.5ms 18.8MB 100ms 0ms wasmtime 32.0.0
java 1-m.java 323ms 18ms 236.1MB 627ms 77ms graal/jvm 17.0.8
java 1-m.java 339ms 19ms 178.3MB 920ms 53ms openjdk 21
java 1-m.java 361ms 20ms 127.5MB 967ms 57ms openjdk 23
java 1-m.java 525ms 21ms 215.0MB 1033ms 227ms 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 16ms 96.0MB 3297ms 37ms graal/jvm 17.0.8
java 1-m.java 969ms 1.2ms 48.2MB 3613ms 23ms openjdk 21
java 1-m.java 975ms 13ms 50.4MB 3590ms 27ms openjdk 23
java 1-m.java 1033ms 1.0ms 45.9MB 3390ms 147ms openjdk/zgc 21
wasm 1.rs 4121ms 1.0ms 17.3MB 4110ms 0ms wasmtime 32.0.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 183ms 11ms 48.2MB 500ms 23ms openjdk 21
java 1-m.java 189ms 2.6ms 50.2MB 493ms 20ms openjdk 23
java 1-m.java 195ms 2.6ms 95.8MB 540ms 33ms graal/jvm 17.0.8
java 1-m.java 307ms 6.5ms 45.9MB 517ms 137ms openjdk/zgc 21
wasm 1.rs 345ms 2.7ms 17.3MB 333ms 0ms wasmtime 32.0.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 236ms 2.0ms 17.9MB 223ms 0ms wasmtime 32.0.0
java 4.java 447ms 14ms 101.1MB 630ms 40ms graal/jvm 17.0.8
java 4.java 452ms 0.4ms 47.6MB 537ms 13ms openjdk 21
java 4.java 456ms 3.6ms 49.3MB 543ms 17ms openjdk 23
java 4.java 563ms 4.9ms 45.3MB 527ms 140ms openjdk/zgc 21

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 31ms 1.2ms 17.8MB 20ms 0ms wasmtime 32.0.0
java 4-m.java 122ms 1.7ms 89.0MB 170ms 33ms graal/jvm 17.0.8
java 4.java 123ms 0.6ms 46.6MB 160ms 20ms openjdk 21
java 4-m.java 126ms 2.9ms 48.3MB 173ms 20ms openjdk 23
java 4.java 245ms 1.7ms 43.9MB 167ms 137ms openjdk/zgc 21

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 6.4ms 0.3ms 16.1MB 0ms 0ms wasmtime 32.0.0
java 1.java 62ms 1.3ms 52.7MB 66ms 18ms graal/jvm 17.0.8
java 1.java 71ms 1.1ms 43.7MB 74ms 12ms openjdk 21
java 1.java 72ms 2.0ms 44.7MB 76ms 14ms openjdk 23
java 1.java 189ms 5.2ms 42.9MB 80ms 136ms openjdk/zgc 21

knucleotide

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 3-m.java 1028ms 58ms 124.8MB 3470ms 40ms openjdk 21
java 3-m.java 1058ms 56ms 156.9MB 3590ms 60ms openjdk 23
java 3-m.java 1110ms 8.8ms 177.4MB 3807ms 67ms graal/jvm 17.0.8
java 3-m.java 1442ms 56ms 178.8MB 4513ms 213ms openjdk/zgc 21

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 3-m.java 296ms 12ms 100.1MB 860ms 30ms openjdk 21
java 3-m.java 325ms 14ms 135.1MB 883ms 50ms graal/jvm 17.0.8
java 3-m.java 344ms 11ms 103.1MB 1013ms 43ms openjdk 23
java 3-m.java 434ms 8.6ms 98.4MB 900ms 167ms openjdk/zgc 21

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 8.rs 822ms 2.9ms 20.8MB 807ms 0ms wasmtime 32.0.0
java 1b.java 1143ms 6.0ms 54.5MB 1230ms 27ms openjdk 23
java 1b.java 1166ms 5.0ms 54.4MB 1283ms 20ms openjdk 21
java 1b.java 1185ms 32ms 110.7MB 1397ms 40ms graal/jvm 17.0.8
java 1.java 1257ms 4.7ms 126.5MB 1383ms 47ms graal/jvm 17.0.8
java 1b.java 1288ms 8.7ms 51.3MB 1290ms 140ms openjdk/zgc 21
java 1a.java 1656ms 5.8ms 55.0MB 1757ms 23ms openjdk 21
java 1a.java 1660ms 5.5ms 56.7MB 1753ms 27ms openjdk 23
java 1a.java 1684ms 4.3ms 102.5MB 1790ms 40ms graal/jvm 17.0.8
java 1.java 1702ms 3.6ms 202.6MB 1780ms 37ms openjdk 21
java 1.java 1714ms 2.2ms 307.8MB 1770ms 57ms openjdk 23
java 1a.java 1779ms 6.2ms 52.0MB 1760ms 143ms openjdk/zgc 21
java 1.java 2363ms 9.5ms 848.7MB 1777ms 693ms openjdk/zgc 21
java 2.java timeout 0.0ms 752.2MB 5260ms 123ms openjdk 21
java 2.java timeout 0.0ms 762.3MB 5257ms 143ms openjdk 23
java 2.java timeout 0.0ms 3447.8MB 3350ms 1987ms openjdk/zgc 21

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 8.rs 42ms 0.8ms 17.9MB 30ms 0ms wasmtime 32.0.0
java 1b-m.java 168ms 6.8ms 49.5MB 260ms 20ms openjdk 21
java 1b-m.java 177ms 12ms 51.3MB 273ms 23ms openjdk 23
java 1a-m.java 186ms 2.3ms 50.0MB 290ms 20ms openjdk 21
java 1a-m.java 191ms 1.6ms 52.5MB 297ms 20ms openjdk 23
java 1-m.java 192ms 2.7ms 87.1MB 267ms 33ms openjdk 23
java 1-m.java 192ms 2.2ms 81.5MB 267ms 30ms openjdk 21
java 1-m.java 196ms 8.5ms 111.8MB 303ms 40ms graal/jvm 17.0.8
java 1a-m.java 210ms 2.1ms 98.7MB 313ms 43ms graal/jvm 17.0.8
java 1b-m.java 229ms 10ms 101.9MB 393ms 37ms graal/jvm 17.0.8
java 1b.java 316ms 26ms 47.9MB 317ms 140ms openjdk/zgc 21
java 1a.java 321ms 3.6ms 48.8MB 293ms 143ms openjdk/zgc 21
java 1.java 338ms 8.4ms 114.4MB 263ms 160ms openjdk/zgc 21
java 2-m.java 558ms 6.3ms 636.9MB 840ms 93ms openjdk 21
java 2-m.java 575ms 4.2ms 811.9MB 837ms 120ms openjdk 23
java 2.java 1616ms 60ms 1396.0MB 843ms 1073ms openjdk/zgc 21

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 402ms 2.9ms 547.2MB 510ms 83ms openjdk 23
java 1.java 404ms 4.1ms 679.9MB 473ms 97ms openjdk 21
java 1-m.java 405ms 5.5ms 633.0MB 597ms 110ms graal/jvm 17.0.8
wasm 1.rs 885ms 0.7ms 43.7MB 860ms 10ms wasmtime 32.0.0
java 1.java 1035ms 24ms 958.9MB 473ms 707ms openjdk/zgc 21

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 163ms 2.7ms 158.7MB 237ms 47ms openjdk 23
java 1-m.java 165ms 0.4ms 207.1MB 237ms 37ms openjdk 21
wasm 1.rs 197ms 2.7ms 23.7MB 183ms 0ms wasmtime 32.0.0
java 1-m.java 214ms 5.9ms 253.7MB 350ms 67ms graal/jvm 17.0.8
java 1.java 420ms 20ms 341.6MB 217ms 277ms openjdk/zgc 21

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 404ms 2.4ms 17.8MB 393ms 0ms wasmtime 32.0.0
java 1.java 440ms 3.0ms 45.1MB 477ms 20ms openjdk 21
java 1.java 444ms 1.1ms 48.2MB 480ms 20ms openjdk 23
java 1.java 447ms 4.2ms 81.5MB 483ms 27ms graal/jvm 17.0.8
wasm 2.rs 563ms 3.0ms 17.9MB 550ms 0ms wasmtime 32.0.0
java 1.java 570ms 5.4ms 44.7MB 497ms 133ms openjdk/zgc 21
java 2.java 1230ms 3.1ms 579.3MB 1353ms 83ms openjdk 21
java 2.java 1248ms 1.3ms 759.3MB 1357ms 110ms openjdk 23
java 2.java 3219ms 18ms 2343.5MB 1627ms 1803ms openjdk/zgc 21

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 48ms 1.3ms 19.8MB 40ms 0ms wasmtime 32.0.0
wasm 2.rs 63ms 0.2ms 17.9MB 50ms 0ms wasmtime 32.0.0
java 1.java 119ms 2.0ms 45.2MB 157ms 20ms openjdk 21
java 1.java 120ms 1.7ms 48.4MB 157ms 20ms openjdk 23
java 1.java 125ms 4.1ms 81.6MB 153ms 33ms graal/jvm 17.0.8
java 1.java 243ms 3.0ms 44.8MB 167ms 140ms openjdk/zgc 21
java 2-m.java 286ms 3.4ms 356.7MB 417ms 53ms openjdk 21
java 2-m.java 310ms 7.8ms 413.9MB 440ms 70ms openjdk 23
java 2.java 684ms 9.8ms 530.4MB 453ms 420ms openjdk/zgc 21

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 367ms 10ms 22.7MB 353ms 0ms wasmtime 32.0.0
java 1.java 402ms 2.3ms 118.6MB 447ms 23ms openjdk 23
java 1.java 410ms 1.4ms 114.9MB 463ms 20ms openjdk 21
wasm 1.rs 458ms 4.0ms 56.9MB 443ms 0ms wasmtime 32.0.0
java 1.java 580ms 9.2ms 112.8MB 480ms 170ms openjdk/zgc 21
java 1-m.java 624ms 34ms 271.5MB 903ms 70ms graal/jvm 17.0.8
java 2.java 781ms 2.9ms 57.3MB 840ms 17ms openjdk 21
java 2.java 782ms 2.8ms 60.3MB 833ms 23ms openjdk 23
java 2.java 841ms 5.2ms 53.3MB 770ms 140ms openjdk/zgc 21
java 2-m.java 1350ms 36ms 197.1MB 2433ms 97ms graal/jvm 17.0.8

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 90ms 0.5ms 27.6MB 80ms 0ms wasmtime 32.0.0
wasm 2.rs 95ms 0.6ms 18.9MB 83ms 0ms wasmtime 32.0.0
java 1.java 154ms 0.3ms 68.1MB 200ms 20ms openjdk 23
java 1.java 162ms 5.3ms 65.0MB 217ms 20ms openjdk 21
java 1-m.java 205ms 14ms 137.8MB 287ms 43ms graal/jvm 17.0.8
java 2.java 259ms 1.4ms 50.0MB 323ms 17ms openjdk 21
java 2.java 262ms 7.0ms 50.4MB 310ms 17ms openjdk 23
java 1.java 287ms 3.4ms 61.6MB 210ms 147ms openjdk/zgc 21
java 2.java 370ms 1.9ms 47.3MB 310ms 143ms openjdk/zgc 21
java 2-m.java 472ms 2.1ms 145.4MB 833ms 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 2190ms 4.4ms 19.1MB 2173ms 0ms wasmtime 32.0.0
java 1.java 3228ms 11ms 443.7MB 3627ms 103ms graal/jvm 17.0.8
java 1.java 3700ms 73ms 442.1MB 4620ms 113ms openjdk 23
java 1.java 3741ms 9.8ms 385.9MB 4627ms 113ms openjdk 21
java 1.java timeout 0.0ms 1943.1MB 4667ms 1197ms openjdk/zgc 21

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 519ms 3.4ms 18.1MB 507ms 0ms wasmtime 32.0.0
java 1-m.java 894ms 6.9ms 443.3MB 1253ms 90ms graal/jvm 17.0.8
java 1-m.java 987ms 25ms 365.4MB 1767ms 100ms openjdk 21
java 1-m.java 996ms 20ms 418.7MB 1797ms 107ms openjdk 23
java 1.java 1998ms 39ms 1350.6MB 1717ms 1037ms openjdk/zgc 21

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 3.java timeout 0.0ms 400.1MB 5410ms 90ms graal/jvm 17.0.8
java 3.java timeout 0.0ms 302.1MB 5320ms 63ms openjdk 21
java 3.java timeout 0.0ms 304.7MB 5317ms 60ms openjdk 23
java 3.java timeout 0.0ms 471.3MB 4970ms 290ms openjdk/zgc 21

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 3-m.java 787ms 22ms 175.2MB 1170ms 57ms graal/jvm 17.0.8
java 3-m.java 792ms 11ms 128.8MB 1183ms 33ms openjdk 21
java 3-m.java 813ms 6.3ms 132.3MB 1227ms 37ms openjdk 23
java 3.java 972ms 25ms 133.5MB 1163ms 183ms openjdk/zgc 21

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 1991ms 5.9ms 47.8MB 7610ms 23ms openjdk 21
java 2-m.java 1993ms 9.7ms 48.4MB 7613ms 30ms openjdk 23
java 2-m.java 2124ms 14ms 45.4MB 7600ms 157ms openjdk/zgc 21
java 2-m.java 2505ms 22ms 93.6MB 9400ms 40ms graal/jvm 17.0.8
wasm 2.rs 3694ms 3.7ms 17.6MB 3683ms 0ms wasmtime 32.0.0
wasm 7.rs 4898ms 2.5ms 18.1MB 4883ms 0ms wasmtime 32.0.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 600ms 7.0ms 47.8MB 2137ms 20ms openjdk 21
java 2-m.java 609ms 4.3ms 48.7MB 2157ms 23ms openjdk 23
java 2-m.java 729ms 2.4ms 45.4MB 2157ms 140ms openjdk/zgc 21
java 2-m.java 768ms 0.7ms 93.5MB 2703ms 37ms graal/jvm 17.0.8
wasm 2.rs 934ms 2.7ms 17.7MB 920ms 0ms wasmtime 32.0.0
wasm 7.rs 1229ms 0.8ms 19.5MB 1217ms 0ms wasmtime 32.0.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 239ms 1.7ms 17.4MB 223ms 0ms wasmtime 32.0.0
java 2-m.java 251ms 5.6ms 47.5MB 753ms 17ms openjdk 21
java 2-m.java 258ms 5.3ms 48.9MB 763ms 20ms openjdk 23
java 2-m.java 311ms 24ms 94.6MB 957ms 37ms graal/jvm 17.0.8
wasm 7.rs 315ms 1.9ms 18.2MB 300ms 0ms wasmtime 32.0.0
java 2-m.java 372ms 10ms 45.2MB 733ms 140ms 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 1138ms 15ms 20.2MB 1123ms 0ms wasmtime 32.0.0
java 1-m.java 2287ms 150ms 261.9MB 8677ms 140ms openjdk 21
java 1-m.java 2399ms 22ms 242.5MB 9087ms 147ms openjdk 23
java 1-m.java 2760ms 47ms 1225.5MB 8833ms 1123ms openjdk/zgc 21

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 82ms 1.1ms 20.2MB 70ms 0ms wasmtime 32.0.0
java 1-m.java 413ms 26ms 94.6MB 1330ms 63ms openjdk 23
java 1-m.java 490ms 23ms 120.6MB 1650ms 70ms openjdk 21
java 1-m.java 654ms 6.4ms 213.7MB 1737ms 257ms openjdk/zgc 21