Nim VS Java benchmarks

Current benchmark data was generated on Sun Jul 13 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 455ms 1.0ms 575.9MB 557ms 83ms openjdk 21
java 2-m.java 469ms 4.8ms 641.2MB 673ms 113ms graal/jvm 17.0.8
java 2.java 473ms 8.9ms 642.1MB 573ms 103ms openjdk 23
nim 2.nim 786ms 11ms 34.9MB 770ms 3ms nim 2.2.4
nim 2.nim 947ms 6.3ms 35.2MB 923ms 10ms nim/clang 2.2.4
java 2.java 1191ms 22ms 1054.4MB 577ms 773ms openjdk/zgc 21

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 73ms 0.2ms 5.5MB 60ms 0ms nim 2.2.4
nim 2.nim 93ms 1.5ms 5.8MB 80ms 0ms nim/clang 2.2.4
java 2-m.java 125ms 0.6ms 167.1MB 157ms 33ms openjdk 21
java 2.java 129ms 5.0ms 96.0MB 167ms 27ms openjdk 23
java 2-m.java 151ms 3.3ms 227.2MB 220ms 63ms graal/jvm 17.0.8
java 2.java 305ms 2.0ms 241.5MB 157ms 197ms openjdk/zgc 21

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 2305ms 190ms 264.5MB 8783ms 140ms openjdk 21
java 1-m.java 2419ms 254ms 243.1MB 9207ms 137ms openjdk 23
java 1-m.java 2938ms 109ms 1226.1MB 9570ms 1070ms openjdk/zgc 21
nim 1.nim timeout 0.0ms 574.4MB 2647ms 1873ms nim 2.2.4
nim 3.nim timeout 0.0ms 6.6MB 4990ms 0ms nim 2.2.4
nim 1.nim timeout 0.0ms 574.8MB 2590ms 1930ms nim/clang 2.2.4
nim 3.nim timeout 0.0ms 6.9MB 4983ms 0ms nim/clang 2.2.4

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 464ms 5.9ms 96.8MB 1527ms 67ms openjdk 23
java 1-m.java 473ms 16ms 121.6MB 1597ms 57ms openjdk 21
java 1-m.java 654ms 16ms 213.4MB 1803ms 237ms openjdk/zgc 21
nim 3.nim 903ms 4.5ms 4.0MB 893ms 0ms nim/clang 2.2.4
nim 3.nim 905ms 4.9ms 3.6MB 893ms 0ms nim 2.2.4
nim 1.nim 4097ms 6.6ms 518.7MB 2123ms 1547ms nim/clang 2.2.4
nim 1.nim 4111ms 9.9ms 518.2MB 2133ms 1553ms nim 2.2.4

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 188ms 2.6ms 1.5MB 177ms 0ms nim 2.2.4
nim 2.nim 243ms 2.2ms 1.8MB 233ms 0ms nim/clang 2.2.4
java 4.java 448ms 4.7ms 101.5MB 633ms 37ms graal/jvm 17.0.8
java 4.java 458ms 6.9ms 47.4MB 543ms 17ms openjdk 21
java 4.java 464ms 8.8ms 49.1MB 557ms 20ms openjdk 23
nim 1.nim 537ms 2.6ms 1.8MB 447ms 73ms nim/clang 2.2.4
nim 1.nim 560ms 2.7ms 1.5MB 470ms 73ms nim 2.2.4
java 4.java 566ms 2.0ms 45.1MB 530ms 140ms openjdk/zgc 21

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 21ms 0.8ms 1.5MB 10ms 0ms nim 2.2.4
nim 2.nim 27ms 1.0ms 1.8MB 20ms 0ms nim/clang 2.2.4
nim 1.nim 57ms 0.9ms 1.8MB 40ms 0ms nim/clang 2.2.4
nim 1.nim 59ms 0.7ms 1.5MB 47ms 0ms nim 2.2.4
java 4.java 120ms 2.9ms 46.6MB 163ms 13ms openjdk 21
java 4.java 127ms 4.2ms 48.0MB 173ms 17ms openjdk 23
java 4-m.java 131ms 4.7ms 94.1MB 183ms 37ms graal/jvm 17.0.8
java 4.java 242ms 2.2ms 43.9MB 163ms 137ms openjdk/zgc 21

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 1.0ms 0.0ms 1.6MB 0ms 0ms nim 2.2.4
nim 1.nim 1.1ms 0.0ms 1.8MB 0ms 0ms nim/clang 2.2.4
java 1.java 62ms 2.2ms 52.9MB 66ms 18ms graal/jvm 17.0.8
java 1.java 67ms 7.0ms 43.8MB 74ms 18ms openjdk 21
java 1.java 71ms 5.3ms 44.7MB 74ms 16ms openjdk 23
java 1.java 193ms 7.2ms 42.8MB 82ms 136ms openjdk/zgc 21

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 112ms 1.7ms 1.6MB 103ms 0ms nim/clang 2.2.4
nim 2.nim 114ms 2.9ms 1.4MB 110ms 0ms nim 2.2.4
nim 1.nim timeout 0.0ms 1.3MB 4990ms 0ms nim 2.2.4
nim 1.nim timeout 0.0ms 1.5MB 4990ms 0ms nim/clang 2.2.4

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 324ms 2.4ms 1.9MB 317ms 0ms nim/clang 2.2.4
nim 2.nim 338ms 4.4ms 1.4MB 330ms 0ms nim 2.2.4
nim 1.nim timeout 0.0ms 1.3MB 4990ms 0ms nim 2.2.4
nim 1.nim timeout 0.0ms 1.5MB 4990ms 0ms nim/clang 2.2.4

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 48ms 0.2ms 1.5MB 40ms 0ms nim/clang 2.2.4
nim 2.nim 51ms 1.6ms 1.3MB 40ms 0ms nim 2.2.4
nim 1.nim 476ms 2.4ms 1.3MB 467ms 0ms nim 2.2.4
nim 1.nim 479ms 9.7ms 1.5MB 470ms 0ms nim/clang 2.2.4

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 387ms 0.9ms 4.8MB 380ms 0ms nim/clang 2.2.4
nim 1.nim 576ms 1.6ms 4.5MB 567ms 0ms nim 2.2.4
java 1b.java 1148ms 3.6ms 54.4MB 1243ms 23ms openjdk 21
java 1b.java 1151ms 11ms 55.3MB 1253ms 23ms openjdk 23
java 1b.java 1176ms 8.9ms 104.9MB 1347ms 40ms graal/jvm 17.0.8
java 1.java 1253ms 4.6ms 134.0MB 1370ms 43ms graal/jvm 17.0.8
java 1b.java 1270ms 3.9ms 51.2MB 1247ms 143ms openjdk/zgc 21
java 1a.java 1659ms 4.1ms 56.1MB 1757ms 23ms openjdk 23
java 1a.java 1664ms 3.0ms 54.6MB 1767ms 23ms openjdk 21
java 1a.java 1682ms 5.1ms 102.5MB 1793ms 40ms graal/jvm 17.0.8
java 1.java 1699ms 4.8ms 202.4MB 1773ms 37ms openjdk 21
java 1.java 1719ms 5.3ms 339.5MB 1780ms 57ms openjdk 23
java 1a.java 1779ms 9.0ms 51.9MB 1757ms 140ms openjdk/zgc 21
java 1.java 2364ms 7.9ms 840.5MB 1793ms 677ms openjdk/zgc 21
java 2.java timeout 0.0ms 667.9MB 5287ms 113ms openjdk 21
java 2.java timeout 0.0ms 832.8MB 5270ms 133ms openjdk 23
java 2.java timeout 0.0ms 3268.7MB 3443ms 1920ms openjdk/zgc 21

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 19ms 0.4ms 1.9MB 10ms 0ms nim/clang 2.2.4
nim 1.nim 27ms 0.2ms 1.6MB 20ms 0ms nim 2.2.4
java 1b-m.java 182ms 16ms 51.0MB 290ms 20ms openjdk 23
java 1b-m.java 184ms 23ms 49.7MB 300ms 20ms openjdk 21
java 1-m.java 189ms 0.7ms 81.7MB 263ms 30ms openjdk 21
java 1-m.java 190ms 1.4ms 87.0MB 263ms 27ms openjdk 23
java 1a-m.java 190ms 0.9ms 50.8MB 293ms 17ms openjdk 21
java 1a-m.java 192ms 1.9ms 52.4MB 297ms 23ms openjdk 23
java 1-m.java 198ms 1.9ms 112.3MB 303ms 43ms graal/jvm 17.0.8
java 1a-m.java 205ms 5.5ms 98.8MB 313ms 43ms graal/jvm 17.0.8
java 1b-m.java 220ms 15ms 102.1MB 373ms 37ms graal/jvm 17.0.8
java 1a.java 311ms 2.1ms 49.0MB 293ms 137ms openjdk/zgc 21
java 1b.java 323ms 14ms 47.7MB 327ms 137ms openjdk/zgc 21
java 1.java 329ms 3.3ms 114.4MB 267ms 157ms openjdk/zgc 21
java 2-m.java 565ms 6.3ms 660.9MB 850ms 93ms openjdk 21
java 2-m.java 567ms 4.7ms 757.4MB 843ms 110ms openjdk 23
java 2.java 1585ms 8.4ms 1334.6MB 847ms 1037ms openjdk/zgc 21

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 401ms 5.9ms 544.3MB 500ms 87ms openjdk 23
java 1.java 403ms 2.1ms 680.0MB 480ms 87ms openjdk 21
java 1-m.java 444ms 62ms 669.4MB 667ms 113ms graal/jvm 17.0.8
nim 1.nim 547ms 6.1ms 33.9MB 527ms 3ms nim 2.2.4
nim 1.nim 645ms 20ms 34.7MB 623ms 7ms nim/clang 2.2.4
java 1.java 1021ms 2.8ms 934.5MB 470ms 697ms openjdk/zgc 21

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 116ms 3.2ms 9.6MB 103ms 0ms nim 2.2.4
nim 1.nim 136ms 5.6ms 9.9MB 123ms 0ms nim/clang 2.2.4
java 1-m.java 164ms 3.1ms 158.5MB 237ms 43ms openjdk 23
java 1-m.java 170ms 10ms 206.6MB 237ms 47ms openjdk 21
java 1-m.java 221ms 7.1ms 253.9MB 363ms 63ms graal/jvm 17.0.8
java 1.java 411ms 7.8ms 341.9MB 223ms 267ms openjdk/zgc 21

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 320ms 1.7ms 1.8MB 310ms 0ms nim 2.2.4
nim 2.nim 343ms 3.6ms 2.0MB 337ms 0ms nim/clang 2.2.4
java 1.java 442ms 1.0ms 45.1MB 480ms 17ms openjdk 21
java 1.java 444ms 3.9ms 48.3MB 480ms 23ms openjdk 23
java 1.java 454ms 0.5ms 81.1MB 490ms 30ms graal/jvm 17.0.8
java 1.java 563ms 6.0ms 44.7MB 483ms 133ms openjdk/zgc 21
java 2.java 1235ms 3.8ms 571.4MB 1363ms 87ms openjdk 21
java 2.java 1310ms 91ms 794.4MB 1433ms 93ms openjdk 23
java 2.java 3270ms 60ms 2461.0MB 1670ms 1817ms openjdk/zgc 21

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 2.nim 35ms 0.8ms 1.8MB 30ms 0ms nim 2.2.4
nim 2.nim 36ms 0.6ms 2.0MB 30ms 0ms nim/clang 2.2.4
java 1.java 116ms 4.0ms 45.4MB 143ms 23ms openjdk 21
java 1.java 119ms 2.3ms 81.5MB 150ms 27ms graal/jvm 17.0.8
java 1.java 120ms 2.0ms 47.9MB 157ms 13ms openjdk 23
java 1.java 240ms 5.7ms 44.7MB 153ms 140ms openjdk/zgc 21
java 2-m.java 294ms 9.4ms 366.4MB 437ms 50ms openjdk 21
java 2-m.java 317ms 4.3ms 397.4MB 450ms 67ms openjdk 23
java 2.java 674ms 5.7ms 533.2MB 460ms 400ms openjdk/zgc 21

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 271ms 4.0ms 41.5MB 263ms 0ms nim 2.2.4
nim 1.nim 322ms 6.8ms 41.8MB 313ms 0ms nim/clang 2.2.4
java 1.java 390ms 0.8ms 118.4MB 430ms 23ms openjdk 23
java 1.java 391ms 5.0ms 115.1MB 447ms 23ms openjdk 21
java 1.java 561ms 6.7ms 112.6MB 463ms 160ms openjdk/zgc 21
java 1-m.java 626ms 57ms 271.3MB 907ms 73ms graal/jvm 17.0.8
java 2.java 779ms 2.8ms 57.2MB 837ms 23ms openjdk 21
java 2.java 783ms 1.4ms 60.2MB 830ms 20ms openjdk 23
java 2.java 853ms 0.8ms 53.3MB 780ms 147ms openjdk/zgc 21
java 2-m.java 1413ms 80ms 290.5MB 2513ms 117ms graal/jvm 17.0.8

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 52ms 2.4ms 11.5MB 43ms 0ms nim 2.2.4
nim 1.nim 66ms 4.2ms 11.8MB 57ms 0ms nim/clang 2.2.4
java 1.java 152ms 2.2ms 64.8MB 200ms 20ms openjdk 21
java 1.java 154ms 3.8ms 68.1MB 203ms 20ms openjdk 23
java 1-m.java 212ms 3.8ms 133.8MB 293ms 47ms graal/jvm 17.0.8
java 2.java 262ms 8.9ms 50.3MB 310ms 20ms openjdk 23
java 2.java 263ms 4.7ms 49.3MB 330ms 20ms openjdk 21
java 1.java 278ms 4.5ms 61.5MB 197ms 143ms openjdk/zgc 21
java 2.java 368ms 3.9ms 47.5MB 307ms 143ms openjdk/zgc 21
java 2-m.java 483ms 1.9ms 140.6MB 857ms 63ms graal/jvm 17.0.8

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 1646ms 10ms 152.3MB 1613ms 20ms nim/clang 2.2.4
nim 1.nim 1673ms 4.5ms 151.5MB 1643ms 13ms nim 2.2.4
java 3.java timeout 0.0ms 407.7MB 5397ms 93ms graal/jvm 17.0.8
java 3.java timeout 0.0ms 302.1MB 5333ms 53ms openjdk 21
java 3.java timeout 0.0ms 304.8MB 5320ms 67ms openjdk 23
java 3.java timeout 0.0ms 471.1MB 4957ms 303ms openjdk/zgc 21

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 173ms 2.5ms 17.5MB 160ms 0ms nim/clang 2.2.4
nim 1.nim 177ms 0.6ms 17.4MB 160ms 0ms nim 2.2.4
java 3-m.java 782ms 10ms 175.4MB 1160ms 47ms graal/jvm 17.0.8
java 3-m.java 806ms 18ms 130.9MB 1183ms 33ms openjdk 21
java 3-m.java 814ms 8.2ms 132.4MB 1230ms 30ms openjdk 23
java 3.java 963ms 9.6ms 133.9MB 1133ms 177ms 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 1988ms 6.6ms 47.8MB 7613ms 23ms openjdk 21
java 2-m.java 1996ms 1.7ms 48.5MB 7643ms 30ms openjdk 23
java 2-m.java 2127ms 4.4ms 45.5MB 7673ms 153ms openjdk/zgc 21
java 2-m.java 2508ms 27ms 94.1MB 9400ms 37ms graal/jvm 17.0.8
nim 1.nim 3589ms 2.6ms 1.6MB 3580ms 0ms nim/clang 2.2.4
nim 1.nim 3610ms 3.4ms 1.4MB 3600ms 0ms nim 2.2.4

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 602ms 2.3ms 47.5MB 2150ms 17ms openjdk 21
java 2-m.java 612ms 9.6ms 48.6MB 2137ms 20ms openjdk 23
java 2-m.java 737ms 8.8ms 45.3MB 2157ms 143ms openjdk/zgc 21
java 2-m.java 761ms 18ms 94.5MB 2673ms 37ms graal/jvm 17.0.8
nim 1.nim 899ms 0.6ms 1.5MB 890ms 0ms nim/clang 2.2.4
nim 1.nim 904ms 3.3ms 1.3MB 893ms 0ms nim 2.2.4

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
nim 1.nim 226ms 0.2ms 1.5MB 220ms 0ms nim/clang 2.2.4
nim 1.nim 228ms 1.1ms 1.3MB 220ms 0ms nim 2.2.4
java 2-m.java 253ms 12ms 47.6MB 770ms 17ms openjdk 21
java 2-m.java 255ms 4.3ms 48.5MB 763ms 20ms openjdk 23
java 2-m.java 328ms 5.5ms 93.3MB 1020ms 40ms graal/jvm 17.0.8
java 2-m.java 381ms 12ms 45.7MB 770ms 147ms openjdk/zgc 21