Ruby VS Java benchmarks

Current benchmark data was generated on Mon Mar 31 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 446ms 6.6ms 574.3MB 540ms 80ms openjdk 21
java 2-m.java 461ms 12ms 639.3MB 650ms 120ms graal/jvm 17.0.8
java 2.java 467ms 4.6ms 626.3MB 577ms 97ms openjdk 23
java 2.java 1242ms 10ms 1063.4MB 587ms 813ms openjdk/zgc 21
ruby 1.rb 4874ms 16ms 109.4MB 4770ms 90ms ruby/yjit 3.4.2
ruby 1.rb timeout 0.0ms 70.1MB 4937ms 43ms ruby 3.4.2
ruby 1.rb timeout 0.0ms 793.7MB 6597ms 650ms truffleruby 24.2.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 122ms 0.5ms 168.2MB 157ms 33ms openjdk 21
java 2-m.java 126ms 6.9ms 98.0MB 163ms 30ms openjdk 23
java 2-m.java 147ms 7.7ms 226.3MB 220ms 57ms graal/jvm 17.0.8
java 2.java 305ms 2.4ms 241.7MB 147ms 210ms openjdk/zgc 21
ruby 1.rb 494ms 2.7ms 20.3MB 470ms 10ms ruby/yjit 3.4.2
ruby 1-m.rb 575ms 60ms 422.2MB 1147ms 167ms truffleruby 24.2.0
ruby 1.rb 937ms 6.7ms 19.6MB 910ms 13ms ruby 3.4.2

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 1478ms 22ms 63.8MB 1397ms 67ms ruby/yjit 3.4.2
ruby 1.rb 1855ms 2.6ms 63.1MB 1780ms 60ms ruby 3.4.2
java 1-m.java 2160ms 236ms 259.0MB 8187ms 127ms openjdk 21
java 1-m.java 2442ms 127ms 242.9MB 9230ms 147ms openjdk 23
java 1-m.java 2866ms 129ms 1219.2MB 9147ms 1173ms openjdk/zgc 21
ruby 1.rb timeout 0.0ms 347.0MB 4763ms 1433ms truffleruby 24.2.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 159ms 1.0ms 25.6MB 127ms 17ms ruby/yjit 3.4.2
ruby 1.rb 185ms 1.3ms 25.1MB 153ms 17ms ruby 3.4.2
java 1-m.java 418ms 14ms 92.2MB 1377ms 60ms openjdk 23
java 1-m.java 476ms 18ms 117.2MB 1580ms 63ms openjdk 21
java 1-m.java 673ms 18ms 230.2MB 1827ms 257ms openjdk/zgc 21
ruby 1.rb timeout 0.0ms 353.2MB 4600ms 1553ms truffleruby 24.2.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 4.java 438ms 1.8ms 100.5MB 603ms 43ms graal/jvm 17.0.8
java 4.java 455ms 3.1ms 47.6MB 537ms 20ms openjdk 21
java 4.java 458ms 2.9ms 49.1MB 547ms 17ms openjdk 23
java 4.java 570ms 1.8ms 45.0MB 543ms 137ms openjdk/zgc 21
ruby 6.rb 2060ms 10ms 23.0MB 2030ms 13ms ruby/yjit 3.4.2
ruby 6-m.rb 2165ms 97ms 405.7MB 5593ms 363ms truffleruby 24.2.0
ruby 6.rb 3848ms 36ms 22.5MB 3820ms 10ms ruby 3.4.2

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 4.java 123ms 1.3ms 46.6MB 163ms 13ms openjdk 21
java 4.java 125ms 5.6ms 47.9MB 170ms 17ms openjdk 23
java 4-m.java 136ms 11ms 95.6MB 203ms 37ms graal/jvm 17.0.8
java 4.java 247ms 1.3ms 43.9MB 167ms 140ms openjdk/zgc 21
ruby 6.rb 266ms 4.3ms 15.0MB 247ms 10ms ruby/yjit 3.4.2
ruby 6.rb 437ms 2.4ms 14.5MB 420ms 7ms ruby 3.4.2
ruby 6-m.rb 815ms 10ms 363.4MB 2020ms 177ms truffleruby 24.2.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 35ms 0.4ms 142.2MB 14ms 28ms truffleruby 24.2.0
ruby 1.rb 52ms 3.5ms 12.9MB 34ms 2ms ruby 3.4.2
ruby 1.rb 53ms 0.9ms 13.0MB 34ms 6ms ruby/yjit 3.4.2
java 1.java 61ms 2.2ms 52.6MB 64ms 20ms graal/jvm 17.0.8
java 1.java 68ms 7.8ms 43.6MB 76ms 12ms openjdk 21
java 1.java 72ms 4.4ms 44.7MB 78ms 16ms openjdk 23
java 1.java 195ms 7.0ms 43.0MB 86ms 138ms 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 252ms 3.6ms 29.1MB 220ms 20ms ruby 3.4.2
ruby 1.rb 256ms 3.5ms 28.4MB 227ms 17ms ruby/yjit 3.4.2
ruby 1-m.rb 4493ms 172ms 518.1MB 11833ms 350ms truffleruby 24.2.0

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 2091ms 5.7ms 132.7MB 2000ms 77ms ruby 3.4.2
ruby 1.rb 2116ms 29ms 135.1MB 2017ms 83ms ruby/yjit 3.4.2
ruby 1.rb timeout 0.0ms 495.0MB 13197ms 370ms truffleruby 24.2.0

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 338ms 2.7ms 13.5MB 320ms 7ms ruby/yjit 3.4.2
ruby 1.rb 534ms 7.9ms 13.0MB 517ms 7ms ruby 3.4.2
ruby 1-m.rb 679ms 33ms 375.8MB 1217ms 147ms truffleruby 24.2.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 880ms 3.0ms 13.5MB 857ms 7ms ruby/yjit 3.4.2
ruby 1-m.rb 1252ms 51ms 416.2MB 1803ms 183ms truffleruby 24.2.0
ruby 1.rb 1490ms 12ms 13.0MB 1470ms 7ms ruby 3.4.2

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 196ms 2.7ms 13.5MB 177ms 7ms ruby/yjit 3.4.2
ruby 1.rb 292ms 5.2ms 12.9MB 273ms 0ms ruby 3.4.2
ruby 1-m.rb 513ms 36ms 360.4MB 1000ms 140ms truffleruby 24.2.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 395ms 3.2ms 679.6MB 470ms 87ms openjdk 21
java 1.java 403ms 1.6ms 543.2MB 493ms 93ms openjdk 23
java 1-m.java 412ms 16ms 637.2MB 607ms 107ms graal/jvm 17.0.8
java 1.java 1076ms 3.5ms 966.1MB 440ms 750ms openjdk/zgc 21
ruby 1-m.rb 4071ms 251ms 628.9MB 10250ms 363ms truffleruby 24.2.0
ruby 1.rb timeout 0.0ms 94.3MB 4930ms 50ms ruby 3.4.2
ruby 1.rb timeout 0.0ms 94.8MB 4937ms 50ms ruby/yjit 3.4.2

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 164ms 2.5ms 206.3MB 230ms 47ms openjdk 21
java 1-m.java 165ms 2.0ms 158.9MB 240ms 40ms openjdk 23
java 1-m.java 223ms 6.9ms 254.1MB 370ms 57ms graal/jvm 17.0.8
java 1.java 415ms 11ms 341.7MB 217ms 273ms openjdk/zgc 21
ruby 1-m.rb 2113ms 104ms 582.3MB 5393ms 277ms truffleruby 24.2.0
ruby 1.rb 3439ms 28ms 38.3MB 3403ms 23ms ruby/yjit 3.4.2
ruby 1.rb 4410ms 17ms 37.8MB 4373ms 23ms ruby 3.4.2

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 438ms 4.2ms 48.0MB 470ms 17ms openjdk 23
java 1.java 438ms 4.3ms 45.2MB 473ms 20ms openjdk 21
java 1.java 447ms 2.7ms 81.5MB 477ms 30ms graal/jvm 17.0.8
java 1.java 570ms 1.1ms 45.0MB 487ms 143ms openjdk/zgc 21
ruby 2.rb 830ms 8.7ms 322.7MB 1090ms 113ms truffleruby 24.2.0
java 2.java 1224ms 17ms 555.8MB 1360ms 67ms openjdk 21
java 2.java 1249ms 7.4ms 776.3MB 1370ms 97ms openjdk 23
java 2.java 3395ms 149ms 2652.0MB 1667ms 1940ms openjdk/zgc 21
ruby 2.rb timeout 0.0ms 12.9MB 4987ms 0ms ruby 3.4.2
ruby 2.rb timeout 0.0ms 13.5MB 4980ms 3ms ruby/yjit 3.4.2

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 116ms 3.6ms 81.6MB 143ms 30ms graal/jvm 17.0.8
java 1.java 117ms 0.6ms 44.9MB 153ms 20ms openjdk 21
java 1.java 120ms 2.2ms 47.9MB 153ms 20ms openjdk 23
java 1.java 243ms 3.2ms 44.8MB 160ms 140ms openjdk/zgc 21
java 2-m.java 294ms 6.4ms 364.7MB 423ms 57ms openjdk 21
java 2-m.java 308ms 8.6ms 401.9MB 447ms 60ms openjdk 23
ruby 2-m.rb 310ms 2.6ms 310.1MB 543ms 113ms truffleruby 24.2.0
java 2.java 697ms 16ms 537.4MB 467ms 410ms openjdk/zgc 21
ruby 2.rb 1066ms 0.5ms 13.5MB 1047ms 3ms ruby/yjit 3.4.2
ruby 2.rb 2789ms 66ms 12.9MB 2773ms 0ms ruby 3.4.2

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 383ms 7.9ms 114.9MB 430ms 27ms openjdk 21
java 1.java 389ms 4.7ms 118.3MB 433ms 23ms openjdk 23
java 1.java 557ms 11ms 112.8MB 463ms 167ms openjdk/zgc 21
java 1-m.java 598ms 27ms 233.2MB 870ms 70ms graal/jvm 17.0.8
java 2.java 773ms 7.9ms 57.6MB 830ms 17ms openjdk 21
java 2.java 778ms 4.5ms 60.5MB 830ms 20ms openjdk 23
java 2.java 853ms 16ms 53.4MB 783ms 143ms openjdk/zgc 21
java 2-m.java 1372ms 31ms 247.6MB 2460ms 100ms graal/jvm 17.0.8
ruby 1.rb timeout 0.0ms 325.4MB 4847ms 140ms ruby 3.4.2
ruby 1.rb timeout 0.0ms 327.0MB 4853ms 137ms ruby/yjit 3.4.2
ruby 1.rb timeout 0.0ms 709.5MB 5073ms 150ms truffleruby 24.2.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 153ms 2.7ms 68.5MB 197ms 23ms openjdk 23
java 1.java 154ms 2.2ms 64.7MB 207ms 17ms openjdk 21
java 1-m.java 206ms 11ms 137.5MB 283ms 50ms graal/jvm 17.0.8
java 2.java 254ms 2.5ms 49.8MB 317ms 17ms openjdk 21
java 2.java 263ms 5.2ms 50.7MB 313ms 17ms openjdk 23
java 1.java 279ms 5.2ms 61.5MB 200ms 143ms openjdk/zgc 21
java 2.java 368ms 2.4ms 47.7MB 303ms 143ms openjdk/zgc 21
java 2-m.java 474ms 5.0ms 145.4MB 840ms 60ms graal/jvm 17.0.8
ruby 1-m.rb 1735ms 26ms 487.2MB 2477ms 167ms truffleruby 24.2.0
ruby 1.rb 3439ms 35ms 131.8MB 3347ms 77ms ruby/yjit 3.4.2
ruby 1.rb 4550ms 60ms 131.1MB 4463ms 77ms ruby 3.4.2

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 3176ms 11ms 442.6MB 3620ms 87ms graal/jvm 17.0.8
java 1.java 3621ms 96ms 430.3MB 4470ms 113ms openjdk 23
java 1.java 3656ms 83ms 353.4MB 4533ms 97ms openjdk 21
java 1.java timeout 0.0ms 1831.4MB 4633ms 1227ms openjdk/zgc 21
ruby 1.rb timeout 0.0ms 46.7MB 4923ms 67ms ruby 3.4.2
ruby 1.rb timeout 0.0ms 126.8MB 4890ms 100ms ruby/yjit 3.4.2
ruby 1.rb timeout 0.0ms 457.8MB 13330ms 427ms truffleruby 24.2.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 881ms 8.8ms 441.3MB 1233ms 80ms graal/jvm 17.0.8
java 1-m.java 988ms 25ms 422.8MB 1780ms 93ms openjdk 21
java 1-m.java 1002ms 24ms 437.7MB 1777ms 103ms openjdk 23
ruby 1-m.rb 1582ms 157ms 399.4MB 4173ms 207ms truffleruby 24.2.0
ruby 1.rb 1703ms 3.1ms 46.2MB 1657ms 33ms ruby 3.4.2
ruby 1.rb 1706ms 60ms 127.5MB 1643ms 50ms ruby/yjit 3.4.2
java 1.java 2030ms 37ms 1345.0MB 1667ms 1083ms 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 1976ms 1.3ms 47.8MB 7553ms 27ms openjdk 21
java 2-m.java 1986ms 6.0ms 48.4MB 7583ms 20ms openjdk 23
java 2-m.java 2103ms 11ms 45.5MB 7567ms 150ms openjdk/zgc 21
java 2-m.java 2484ms 35ms 94.3MB 9307ms 47ms graal/jvm 17.0.8
ruby 4.rb timeout 0.0ms 13.0MB 4983ms 0ms ruby 3.4.2
ruby 4.rb timeout 0.0ms 13.5MB 4980ms 3ms ruby/yjit 3.4.2
ruby 4.rb timeout 0.0ms 463.4MB 5177ms 250ms truffleruby 24.2.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 606ms 6.9ms 48.4MB 2150ms 20ms openjdk 23
java 2-m.java 608ms 6.0ms 47.9MB 2147ms 20ms openjdk 21
java 2-m.java 728ms 4.7ms 45.4MB 2140ms 143ms openjdk/zgc 21
java 2-m.java 766ms 2.2ms 95.1MB 2697ms 40ms graal/jvm 17.0.8
ruby 4.rb 4892ms 24ms 472.1MB 5177ms 213ms truffleruby 24.2.0
ruby 4.rb timeout 0.0ms 13.0MB 4980ms 0ms ruby 3.4.2
ruby 4.rb timeout 0.0ms 13.6MB 4980ms 0ms ruby/yjit 3.4.2

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 253ms 9.4ms 47.4MB 750ms 20ms openjdk 21
java 2-m.java 258ms 12ms 48.5MB 773ms 20ms openjdk 23
java 2-m.java 300ms 28ms 94.1MB 910ms 43ms graal/jvm 17.0.8
java 2-m.java 382ms 8.6ms 45.6MB 763ms 140ms openjdk/zgc 21
ruby 4.rb 1453ms 12ms 389.8MB 1777ms 143ms truffleruby 24.2.0
ruby 4.rb timeout 0.0ms 13.0MB 4980ms 0ms ruby 3.4.2
ruby 4.rb timeout 0.0ms 13.8MB 4983ms 0ms ruby/yjit 3.4.2