Zig VS Java benchmarks

Current benchmark data was generated on Sun Dec 01 2024, 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 471ms 5.6ms 648.0MB 570ms 103ms openjdk 23
java 2-m.java 482ms 17ms 645.0MB 687ms 103ms graal/jvm 17.0.8
java 2.java 530ms 1.5ms 571.1MB 573ms 137ms openjdk 21
java 2.java 1186ms 22ms 1052.1MB 590ms 767ms openjdk/zgc 21
zig 1.zig 1869ms 58ms 49.1MB 1843ms 10ms zig 0.13.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2.java 128ms 1.7ms 166.9MB 153ms 33ms openjdk 21
java 2.java 130ms 5.1ms 98.0MB 157ms 37ms openjdk 23
zig 1.zig 149ms 2.9ms 7.1MB 140ms 0ms zig 0.13.0
java 2-m.java 157ms 17ms 230.2MB 233ms 53ms graal/jvm 17.0.8
java 2.java 309ms 7.0ms 243.6MB 153ms 207ms openjdk/zgc 21

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 586ms 39ms 264.1MB 1630ms 67ms openjdk 21
java 1-m.java 603ms 30ms 227.8MB 1633ms 67ms openjdk 23
java 1-m.java 623ms 39ms 404.3MB 1197ms 110ms graal/jvm 17.0.8
java 1-m.java 944ms 27ms 514.3MB 1567ms 430ms openjdk/zgc 21
zig 1.zig 2268ms 2.9ms 2.5MB 2230ms 27ms zig 0.13.0

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 299ms 8.0ms 230.9MB 583ms 73ms graal/jvm 17.0.8
java 1-m.java 343ms 18ms 178.5MB 930ms 43ms openjdk 21
zig 1.zig 383ms 1.3ms 1.9MB 367ms 3ms zig 0.13.0
java 1-m.java 394ms 8.3ms 112.4MB 1053ms 53ms openjdk 23
java 1-m.java 493ms 2.1ms 215.3MB 953ms 217ms openjdk/zgc 21

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2-m.zig 645ms 6.6ms 3.5MB 2427ms 0ms zig 0.13.0
java 1-m.java 897ms 23ms 100.1MB 3263ms 53ms graal/jvm 17.0.8
java 1-m.java 965ms 57ms 50.0MB 3537ms 20ms openjdk 23
java 1-m.java 983ms 6.8ms 49.0MB 3597ms 37ms openjdk 21
java 1-m.java 1043ms 9.0ms 46.1MB 3407ms 143ms openjdk/zgc 21
zig 3-i.zig 1790ms 1.2ms 1.1MB 1780ms 0ms zig 0.13.0
zig 2.zig 2428ms 24ms 1.1MB 2420ms 0ms zig 0.13.0
zig 1.zig 2870ms 11ms 1.1MB 2857ms 0ms zig 0.13.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2-m.zig 60ms 2.3ms 3.5MB 193ms 0ms zig 0.13.0
zig 3-i.zig 149ms 0.1ms 1.1MB 140ms 0ms zig 0.13.0
java 1-m.java 180ms 5.5ms 48.5MB 493ms 23ms openjdk 21
java 1-m.java 194ms 5.8ms 50.1MB 480ms 23ms openjdk 23
zig 2.zig 200ms 1.5ms 1.1MB 190ms 0ms zig 0.13.0
java 1-m.java 202ms 11ms 101.4MB 547ms 33ms graal/jvm 17.0.8
zig 1.zig 241ms 1.0ms 1.1MB 230ms 0ms zig 0.13.0
java 1-m.java 295ms 2.3ms 45.7MB 483ms 137ms openjdk/zgc 21

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 87ms 1.0ms 1.1MB 80ms 0ms zig 0.13.0
java 4.java 457ms 0.7ms 47.4MB 543ms 20ms openjdk 21
java 4-m.java 462ms 19ms 104.6MB 670ms 43ms graal/jvm 17.0.8
java 4.java 466ms 9.2ms 49.3MB 567ms 17ms openjdk 23
java 4.java 568ms 6.1ms 47.0MB 550ms 133ms openjdk/zgc 21

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 10ms 0.1ms 1.1MB 0ms 0ms zig 0.13.0
java 4-m.java 124ms 4.1ms 87.9MB 163ms 30ms graal/jvm 17.0.8
java 4.java 127ms 1.0ms 46.1MB 170ms 17ms openjdk 21
java 4.java 132ms 2.0ms 47.8MB 177ms 17ms openjdk 23
java 4.java 241ms 3.8ms 43.8MB 153ms 140ms openjdk/zgc 21

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 1.1ms 0.1ms 1.3MB 0ms 0ms zig 0.13.0
java 1.java 68ms 3.0ms 59.0MB 70ms 20ms graal/jvm 17.0.8
java 1.java 73ms 4.6ms 44.8MB 74ms 22ms openjdk 23
java 1.java 77ms 1.6ms 43.8MB 76ms 20ms openjdk 21
java 1.java 187ms 4.1ms 44.6MB 82ms 128ms openjdk/zgc 21

knucleotide

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 787ms 3.8ms 20.4MB 767ms 7ms zig 0.13.0
java 3-m.java 992ms 16ms 155.1MB 3317ms 67ms openjdk 23
java 3-m.java 1000ms 78ms 127.5MB 3403ms 30ms openjdk 21
java 3-m.java 1150ms 14ms 183.6MB 3873ms 70ms graal/jvm 17.0.8
java 3-m.java 1444ms 61ms 180.9MB 4577ms 197ms openjdk/zgc 21

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 88ms 0.8ms 7.6MB 73ms 0ms zig 0.13.0
java 3-m.java 332ms 16ms 101.3MB 963ms 43ms openjdk 21
java 3-m.java 345ms 27ms 89.8MB 977ms 67ms openjdk 23
java 3-m.java 361ms 32ms 141.0MB 980ms 53ms graal/jvm 17.0.8
java 3-m.java 440ms 3.1ms 98.5MB 930ms 167ms openjdk/zgc 21

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 35ms 1.7ms 2.9MB 23ms 0ms zig 0.13.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 98ms 2.2ms 2.9MB 90ms 0ms zig 0.13.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 16ms 1.3ms 1.4MB 10ms 0ms zig 0.13.0

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 246ms 0.8ms 4.2MB 237ms 0ms zig 0.13.0
java 1b.java 1164ms 9.6ms 54.3MB 1273ms 23ms openjdk 21
java 1b.java 1171ms 5.3ms 55.9MB 1297ms 20ms openjdk 23
java 1b.java 1181ms 39ms 108.6MB 1363ms 33ms graal/jvm 17.0.8
java 1.java 1260ms 13ms 139.9MB 1367ms 57ms graal/jvm 17.0.8
java 1b.java 1278ms 21ms 51.4MB 1277ms 130ms openjdk/zgc 21
java 1a.java 1654ms 9.2ms 54.9MB 1747ms 27ms openjdk 21
java 1a.java 1665ms 2.2ms 55.5MB 1770ms 27ms openjdk 23
java 1a.java 1688ms 16ms 105.6MB 1807ms 37ms graal/jvm 17.0.8
java 1.java 1701ms 1.3ms 202.3MB 1780ms 37ms openjdk 21
java 1.java 1709ms 2.1ms 314.7MB 1770ms 53ms openjdk 23
java 1a.java 1780ms 5.2ms 53.7MB 1753ms 147ms openjdk/zgc 21
java 1.java 2351ms 5.1ms 853.8MB 1813ms 637ms openjdk/zgc 21
java 2.java timeout 0.0ms 606.2MB 5250ms 140ms openjdk 21
java 2.java timeout 0.0ms 772.9MB 5320ms 140ms openjdk 23
java 2.java timeout 0.0ms 3284.3MB 3460ms 1913ms openjdk/zgc 21

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 12ms 0.1ms 1.3MB 10ms 0ms zig 0.13.0
java 1b-m.java 181ms 13ms 49.6MB 290ms 20ms openjdk 21
java 1.java 196ms 12ms 82.1MB 267ms 27ms openjdk 21
java 1b-m.java 198ms 8.9ms 51.2MB 310ms 20ms openjdk 23
java 1a-m.java 199ms 3.5ms 50.3MB 310ms 17ms openjdk 21
java 1-m.java 200ms 2.7ms 87.0MB 277ms 33ms openjdk 23
java 1a-m.java 201ms 5.5ms 52.1MB 303ms 20ms openjdk 23
java 1-m.java 204ms 14ms 115.4MB 317ms 40ms graal/jvm 17.0.8
java 1a-m.java 211ms 6.8ms 102.6MB 307ms 50ms graal/jvm 17.0.8
java 1b-m.java 233ms 15ms 104.0MB 400ms 40ms graal/jvm 17.0.8
java 1b.java 308ms 1.6ms 49.4MB 303ms 137ms openjdk/zgc 21
java 1a.java 315ms 3.0ms 49.9MB 300ms 133ms openjdk/zgc 21
java 1.java 338ms 4.9ms 116.4MB 270ms 160ms openjdk/zgc 21
java 2-m.java 579ms 14ms 826.3MB 843ms 127ms openjdk 23
java 2-m.java 621ms 39ms 586.7MB 887ms 127ms openjdk 21
java 2.java 1590ms 18ms 1349.9MB 863ms 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 2.9ms 679.9MB 473ms 90ms openjdk 21
java 1.java 405ms 5.1ms 539.3MB 507ms 87ms openjdk 23
java 1-m.java 417ms 30ms 635.2MB 610ms 123ms graal/jvm 17.0.8
zig 1.zig 829ms 2.4ms 41.1MB 803ms 10ms zig 0.13.0
java 1.java 1094ms 19ms 989.4MB 447ms 767ms openjdk/zgc 21

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 166ms 3.4ms 159.1MB 243ms 40ms openjdk 23
java 1-m.java 166ms 2.4ms 206.3MB 243ms 40ms openjdk 21
zig 1.zig 168ms 1.4ms 11.1MB 157ms 0ms zig 0.13.0
java 1-m.java 225ms 28ms 258.5MB 380ms 57ms graal/jvm 17.0.8
java 1.java 442ms 45ms 341.6MB 223ms 290ms openjdk/zgc 21

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2.zig 273ms 0.3ms 1.1MB 263ms 0ms zig 0.13.0
zig 1.zig 313ms 0.6ms 1.3MB 300ms 0ms zig 0.13.0
java 1.java 443ms 2.2ms 45.3MB 480ms 13ms openjdk 21
java 1.java 448ms 1.5ms 48.5MB 483ms 20ms openjdk 23
java 1.java 450ms 4.6ms 83.3MB 477ms 30ms graal/jvm 17.0.8
java 1.java 569ms 1.3ms 46.9MB 493ms 137ms openjdk/zgc 21
java 2.java 1248ms 2.9ms 611.8MB 1370ms 97ms openjdk 21
java 2.java 1255ms 4.8ms 780.5MB 1383ms 97ms openjdk 23
java 2.java 3283ms 56ms 2413.4MB 1647ms 1847ms openjdk/zgc 21

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2.zig 29ms 0.1ms 1.3MB 20ms 0ms zig 0.13.0
zig 1.zig 33ms 0.2ms 1.3MB 23ms 0ms zig 0.13.0
java 1.java 120ms 2.1ms 87.3MB 137ms 37ms graal/jvm 17.0.8
java 1.java 121ms 1.0ms 45.4MB 163ms 17ms openjdk 21
java 1.java 123ms 1.3ms 48.3MB 157ms 13ms openjdk 23
java 1.java 245ms 0.4ms 44.9MB 160ms 140ms openjdk/zgc 21
java 2-m.java 307ms 2.9ms 343.0MB 450ms 57ms openjdk 21
java 2-m.java 313ms 5.4ms 387.7MB 447ms 67ms openjdk 23
java 2.java 704ms 8.8ms 536.4MB 473ms 420ms openjdk/zgc 21

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 261ms 9.1ms 40.3MB 247ms 0ms zig 0.13.0
zig 2.zig 331ms 1.3ms 6.1MB 320ms 0ms zig 0.13.0
java 1.java 420ms 1.7ms 118.1MB 460ms 20ms openjdk 23
java 1.java 432ms 8.9ms 115.2MB 487ms 20ms openjdk 21
java 1.java 604ms 2.3ms 112.6MB 513ms 163ms openjdk/zgc 21
java 1-m.java 703ms 85ms 239.9MB 1043ms 80ms graal/jvm 17.0.8
java 2.java 781ms 3.3ms 60.6MB 833ms 13ms openjdk 23
java 2.java 789ms 8.6ms 57.0MB 850ms 20ms openjdk 21
java 2.java 844ms 0.9ms 55.1MB 773ms 147ms openjdk/zgc 21
java 2-m.java 1312ms 74ms 240.5MB 2287ms 103ms graal/jvm 17.0.8

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 54ms 5.1ms 11.0MB 43ms 0ms zig 0.13.0
zig 2.zig 81ms 0.7ms 2.4MB 70ms 0ms zig 0.13.0
java 1.java 158ms 0.5ms 68.0MB 200ms 23ms openjdk 23
java 1.java 164ms 12ms 64.9MB 210ms 27ms openjdk 21
java 1-m.java 247ms 12ms 144.7MB 343ms 60ms graal/jvm 17.0.8
java 2.java 260ms 4.2ms 50.2MB 320ms 23ms openjdk 21
java 2.java 264ms 2.9ms 50.4MB 313ms 23ms openjdk 23
java 1.java 288ms 1.8ms 61.6MB 210ms 147ms openjdk/zgc 21
java 2.java 368ms 4.5ms 49.4MB 317ms 130ms openjdk/zgc 21
java 2-m.java 474ms 5.2ms 194.3MB 823ms 70ms graal/jvm 17.0.8

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 2452ms 1.2ms 2.3MB 2417ms 20ms zig 0.13.0
java 1.java 3200ms 37ms 447.4MB 3680ms 97ms graal/jvm 17.0.8
java 1.java 3677ms 90ms 388.1MB 4527ms 123ms openjdk 23
java 1.java 3700ms 76ms 423.2MB 4547ms 120ms openjdk 21
java 1.java timeout 0.0ms 2012.2MB 4660ms 1187ms openjdk/zgc 21

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 1.zig 568ms 3.4ms 1.8MB 557ms 0ms zig 0.13.0
java 1-m.java 918ms 18ms 448.8MB 1310ms 90ms graal/jvm 17.0.8
java 1-m.java 1015ms 31ms 352.4MB 1803ms 90ms openjdk 21
java 1-m.java 1038ms 10ms 370.6MB 1787ms 90ms openjdk 23
java 1.java 2036ms 48ms 1391.2MB 1720ms 1087ms openjdk/zgc 21

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2-m.zig 476ms 6.6ms 3.8MB 1563ms 3ms zig 0.13.0
zig 2.zig 917ms 5.5ms 1.5MB 907ms 0ms zig 0.13.0
java 2-m.java 1952ms 6.8ms 47.7MB 7430ms 20ms openjdk 21
java 2-m.java 1972ms 7.8ms 48.4MB 7477ms 27ms openjdk 23
java 2-m.java 2092ms 3.1ms 45.2MB 7480ms 157ms openjdk/zgc 21
java 2-m.java 2443ms 23ms 101.0MB 8710ms 50ms graal/jvm 17.0.8
zig 1.zig 3670ms 5.0ms 1.5MB 3663ms 0ms zig 0.13.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2-m.zig 125ms 0.4ms 3.7MB 273ms 7ms zig 0.13.0
zig 2.zig 230ms 0.8ms 1.4MB 220ms 0ms zig 0.13.0
java 2-m.java 595ms 4.1ms 49.1MB 2077ms 30ms openjdk 23
java 2-m.java 595ms 6.5ms 47.6MB 2087ms 20ms openjdk 21
java 2-m.java 718ms 4.6ms 47.3MB 2043ms 143ms openjdk/zgc 21
java 2-m.java 738ms 17ms 99.2MB 2487ms 33ms graal/jvm 17.0.8
zig 1.zig 924ms 1.5ms 1.4MB 910ms 0ms zig 0.13.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
zig 2-m.zig 38ms 0.6ms 3.7MB 37ms 0ms zig 0.13.0
zig 2.zig 60ms 0.3ms 1.4MB 50ms 0ms zig 0.13.0
zig 1.zig 232ms 0.9ms 1.4MB 220ms 0ms zig 0.13.0
java 2-m.java 238ms 1.1ms 47.6MB 670ms 33ms openjdk 21
java 2-m.java 246ms 2.6ms 48.9MB 710ms 23ms openjdk 23
java 2-m.java 277ms 22ms 96.4MB 793ms 27ms graal/jvm 17.0.8
java 2-m.java 370ms 2.2ms 47.2MB 717ms 143ms openjdk/zgc 21