Ruby VS Java 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
ruby 1.rb 4679ms 84ms 150.6MB 4570ms 97ms ruby/yjit 3.4.3
ruby 1.rb timeout 0.0ms 70.0MB 4950ms 40ms ruby 3.4.3
ruby 1.rb timeout 0.0ms 780.8MB 6557ms 723ms truffleruby 24.2.1

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
java 2.java 305ms 0.9ms 241.8MB 150ms 207ms openjdk/zgc 21
ruby 1.rb 481ms 3.0ms 20.3MB 460ms 10ms ruby/yjit 3.4.3
ruby 1-m.rb 537ms 62ms 414.1MB 1070ms 150ms truffleruby 24.2.1
ruby 1.rb 931ms 3.2ms 19.5MB 910ms 7ms ruby 3.4.3

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 1461ms 14ms 63.8MB 1383ms 63ms ruby/yjit 3.4.3
ruby 1.rb 1891ms 53ms 63.0MB 1813ms 63ms ruby 3.4.3
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
ruby 1.rb timeout 0.0ms 342.0MB 4683ms 1473ms truffleruby 24.2.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 156ms 2.7ms 25.8MB 127ms 13ms ruby/yjit 3.4.3
ruby 1.rb 181ms 2.9ms 25.0MB 153ms 13ms ruby 3.4.3
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
ruby 1.rb timeout 0.0ms 351.9MB 4730ms 1453ms truffleruby 24.2.1

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
ruby 6.rb 2030ms 11ms 23.0MB 2007ms 10ms ruby/yjit 3.4.3
ruby 6-m.rb 2048ms 68ms 387.2MB 5343ms 347ms truffleruby 24.2.1
ruby 6.rb 3729ms 21ms 22.4MB 3707ms 10ms ruby 3.4.3

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
ruby 6.rb 257ms 3.2ms 15.0MB 240ms 7ms ruby/yjit 3.4.3
ruby 6.rb 431ms 3.1ms 14.4MB 410ms 7ms ruby 3.4.3
ruby 6-m.rb 771ms 87ms 365.8MB 1910ms 180ms truffleruby 24.2.1

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 34ms 0.6ms 140.7MB 12ms 24ms truffleruby 24.2.1
ruby 1.rb 50ms 0.5ms 13.0MB 36ms 4ms ruby/yjit 3.4.3
ruby 1.rb 52ms 1.7ms 12.8MB 38ms 0ms ruby 3.4.3
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

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 247ms 2.4ms 29.9MB 220ms 10ms ruby/yjit 3.4.3
ruby 1.rb 249ms 4.9ms 28.5MB 217ms 17ms ruby 3.4.3
ruby 1-m.rb 4260ms 110ms 489.7MB 11213ms 330ms truffleruby 24.2.1

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 2070ms 4.8ms 135.1MB 1983ms 73ms ruby/yjit 3.4.3
ruby 1.rb 2088ms 5.1ms 134.1MB 2000ms 77ms ruby 3.4.3
ruby 1.rb timeout 0.0ms 649.0MB 13303ms 360ms truffleruby 24.2.1

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 336ms 3.0ms 13.5MB 320ms 7ms ruby/yjit 3.4.3
ruby 1.rb 528ms 0.6ms 12.9MB 510ms 0ms ruby 3.4.3
ruby 1-m.rb 649ms 12ms 361.2MB 1150ms 143ms truffleruby 24.2.1

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 891ms 5.7ms 13.5MB 873ms 3ms ruby/yjit 3.4.3
ruby 1-m.rb 1218ms 28ms 399.4MB 1703ms 157ms truffleruby 24.2.1
ruby 1.rb 1472ms 6.0ms 12.9MB 1453ms 3ms ruby 3.4.3

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 194ms 4.2ms 13.4MB 177ms 7ms ruby/yjit 3.4.3
ruby 1.rb 288ms 3.8ms 12.8MB 270ms 3ms ruby 3.4.3
ruby 1-m.rb 516ms 39ms 354.9MB 993ms 137ms truffleruby 24.2.1

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
java 1.java 1035ms 24ms 958.9MB 473ms 707ms openjdk/zgc 21
ruby 1-m.rb 4011ms 237ms 549.1MB 10167ms 373ms truffleruby 24.2.1
ruby 1.rb timeout 0.0ms 93.5MB 4940ms 50ms ruby 3.4.3
ruby 1.rb timeout 0.0ms 97.2MB 4940ms 50ms ruby/yjit 3.4.3

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
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
ruby 1-m.rb 2063ms 65ms 556.4MB 5307ms 257ms truffleruby 24.2.1
ruby 1.rb 3317ms 15ms 38.3MB 3287ms 17ms ruby/yjit 3.4.3
ruby 1.rb 4340ms 9.9ms 37.6MB 4307ms 20ms ruby 3.4.3

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
java 1.java 570ms 5.4ms 44.7MB 497ms 133ms openjdk/zgc 21
ruby 2.rb 820ms 8.8ms 310.7MB 1043ms 117ms truffleruby 24.2.1
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
ruby 2.rb timeout 0.0ms 12.8MB 4987ms 3ms ruby 3.4.3
ruby 2.rb timeout 0.0ms 13.5MB 4983ms 0ms ruby/yjit 3.4.3

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
ruby 2-m.rb 312ms 9.0ms 309.6MB 540ms 117ms truffleruby 24.2.1
java 2.java 684ms 9.8ms 530.4MB 453ms 420ms openjdk/zgc 21
ruby 2.rb 1025ms 2.6ms 13.5MB 1010ms 0ms ruby/yjit 3.4.3
ruby 2.rb 2856ms 28ms 12.8MB 2840ms 0ms ruby 3.4.3

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 402ms 2.3ms 118.6MB 447ms 23ms openjdk 23
java 1.java 410ms 1.4ms 114.9MB 463ms 20ms openjdk 21
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
ruby 1.rb timeout 0.0ms 325.3MB 4853ms 133ms ruby 3.4.3
ruby 1.rb timeout 0.0ms 327.0MB 4860ms 130ms ruby/yjit 3.4.3
ruby 1.rb timeout 0.0ms 731.8MB 5057ms 157ms truffleruby 24.2.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
ruby 1-m.rb 1692ms 8.3ms 475.4MB 2483ms 163ms truffleruby 24.2.1
ruby 1.rb 3437ms 77ms 131.8MB 3337ms 83ms ruby/yjit 3.4.3
ruby 1.rb 4403ms 32ms 131.0MB 4307ms 80ms ruby 3.4.3

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
ruby 1.rb timeout 0.0ms 130.2MB 4847ms 140ms ruby 3.4.3
ruby 1.rb timeout 0.0ms 130.7MB 4873ms 113ms ruby/yjit 3.4.3
ruby 1.rb timeout 0.0ms 461.2MB 13320ms 417ms truffleruby 24.2.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
ruby 1-m.rb 1612ms 177ms 390.8MB 4260ms 207ms truffleruby 24.2.1
ruby 1.rb 1803ms 20ms 131.0MB 1673ms 117ms ruby/yjit 3.4.3
ruby 1.rb 1805ms 5.0ms 130.1MB 1683ms 103ms ruby 3.4.3
java 1.java 1998ms 39ms 1350.6MB 1717ms 1037ms 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
ruby 4.rb timeout 0.0ms 12.9MB 4980ms 3ms ruby 3.4.3
ruby 4.rb timeout 0.0ms 13.5MB 4983ms 3ms ruby/yjit 3.4.3
ruby 4.rb timeout 0.0ms 412.4MB 5180ms 223ms truffleruby 24.2.1

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
ruby 4.rb 4838ms 9.1ms 424.1MB 5130ms 203ms truffleruby 24.2.1
ruby 4.rb timeout 0.0ms 12.9MB 4980ms 7ms ruby 3.4.3
ruby 4.rb timeout 0.0ms 13.5MB 4983ms 3ms ruby/yjit 3.4.3

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
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
java 2-m.java 372ms 10ms 45.2MB 733ms 140ms openjdk/zgc 21
ruby 4.rb 1417ms 19ms 373.9MB 1763ms 130ms truffleruby 24.2.1
ruby 4.rb timeout 0.0ms 12.9MB 4980ms 7ms ruby 3.4.3
ruby 4.rb timeout 0.0ms 13.8MB 4980ms 3ms ruby/yjit 3.4.3