Ruby VS Java benchmarks

Current benchmark data was generated on Mon May 19 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 6.7ms 574.1MB 563ms 77ms openjdk 21
java 2-m.java 466ms 7.3ms 643.0MB 657ms 117ms graal/jvm 17.0.8
java 2.java 468ms 2.3ms 638.7MB 577ms 87ms openjdk 23
java 2.java 1195ms 46ms 1101.7MB 577ms 787ms openjdk/zgc 21
ruby 1-m.rb 4550ms 58ms 807.5MB 6423ms 470ms truffleruby 24.2.1
ruby 1.rb 4702ms 91ms 150.6MB 4603ms 87ms ruby/yjit 3.4.4
ruby 1.rb timeout 0.0ms 70.4MB 4947ms 40ms ruby 3.4.4

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2.java 128ms 1.6ms 167.0MB 157ms 33ms openjdk 21
java 2.java 133ms 5.7ms 96.5MB 163ms 30ms openjdk 23
java 2-m.java 152ms 7.0ms 215.4MB 227ms 57ms graal/jvm 17.0.8
java 2.java 308ms 9.8ms 241.5MB 170ms 193ms openjdk/zgc 21
ruby 1.rb 493ms 7.5ms 20.3MB 467ms 10ms ruby/yjit 3.4.4
ruby 1-m.rb 536ms 62ms 418.0MB 1057ms 167ms truffleruby 24.2.1
ruby 1.rb 939ms 7.1ms 19.5MB 917ms 13ms ruby 3.4.4

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 1437ms 31ms 63.8MB 1357ms 67ms ruby/yjit 3.4.4
ruby 1.rb 1867ms 6.6ms 63.0MB 1790ms 63ms ruby 3.4.4
java 1-m.java 2237ms 158ms 258.9MB 8497ms 143ms openjdk 21
java 1-m.java 2494ms 200ms 242.9MB 9503ms 130ms openjdk 23
java 1-m.java 2940ms 99ms 1203.7MB 9563ms 1067ms openjdk/zgc 21
ruby 1.rb timeout 0.0ms 340.6MB 4643ms 1510ms truffleruby 24.2.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 152ms 2.8ms 25.8MB 120ms 20ms ruby/yjit 3.4.4
ruby 1.rb 181ms 2.5ms 25.0MB 147ms 17ms ruby 3.4.4
java 1-m.java 467ms 39ms 121.7MB 1563ms 73ms openjdk 21
java 1-m.java 480ms 45ms 94.9MB 1580ms 57ms openjdk 23
java 1-m.java 668ms 8.4ms 212.9MB 1767ms 267ms openjdk/zgc 21
ruby 1.rb timeout 0.0ms 353.7MB 4770ms 1417ms 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 1.7ms 100.5MB 630ms 40ms graal/jvm 17.0.8
java 4.java 454ms 3.1ms 47.5MB 533ms 20ms openjdk 21
java 4.java 471ms 9.6ms 49.1MB 567ms 23ms openjdk 23
java 4.java 572ms 6.6ms 45.1MB 543ms 137ms openjdk/zgc 21
ruby 6.rb 2027ms 13ms 23.0MB 1997ms 10ms ruby/yjit 3.4.4
ruby 6-m.rb 2068ms 126ms 407.9MB 5310ms 330ms truffleruby 24.2.1
ruby 6.rb 3712ms 34ms 22.4MB 3683ms 13ms ruby 3.4.4

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 4.java 122ms 6.1ms 46.5MB 160ms 17ms openjdk 21
java 4-m.java 130ms 1.9ms 47.6MB 180ms 17ms openjdk 23
java 4-m.java 133ms 5.7ms 94.2MB 190ms 33ms graal/jvm 17.0.8
java 4.java 250ms 3.4ms 44.0MB 170ms 140ms openjdk/zgc 21
ruby 6.rb 259ms 3.2ms 15.2MB 237ms 7ms ruby/yjit 3.4.4
ruby 6.rb 421ms 2.0ms 14.4MB 400ms 7ms ruby 3.4.4
ruby 6-m.rb 817ms 16ms 366.6MB 2047ms 163ms truffleruby 24.2.1

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 35ms 0.5ms 141.3MB 14ms 24ms truffleruby 24.2.1
ruby 1.rb 51ms 1.3ms 12.9MB 36ms 2ms ruby/yjit 3.4.4
ruby 1.rb 51ms 1.6ms 12.8MB 38ms 4ms ruby 3.4.4
java 1.java 65ms 2.3ms 53.1MB 68ms 20ms graal/jvm 17.0.8
java 1.java 70ms 6.5ms 44.7MB 80ms 14ms openjdk 23
java 1.java 70ms 4.4ms 43.9MB 76ms 18ms openjdk 21
java 1.java 194ms 7.5ms 43.0MB 86ms 142ms 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 251ms 4.9ms 27.8MB 223ms 17ms ruby 3.4.4
ruby 1.rb 254ms 3.9ms 29.0MB 227ms 13ms ruby/yjit 3.4.4
ruby 1-m.rb 4221ms 61ms 553.6MB 11127ms 323ms truffleruby 24.2.1

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 2088ms 11ms 135.5MB 2000ms 73ms ruby/yjit 3.4.4
ruby 1.rb 2089ms 18ms 130.9MB 2003ms 70ms ruby 3.4.4
ruby 1.rb timeout 0.0ms 486.0MB 13307ms 333ms 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 346ms 5.9ms 13.5MB 327ms 7ms ruby/yjit 3.4.4
ruby 1.rb 528ms 2.9ms 12.9MB 510ms 10ms ruby 3.4.4
ruby 1-m.rb 672ms 40ms 371.0MB 1197ms 137ms truffleruby 24.2.1

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 910ms 1.8ms 13.5MB 890ms 3ms ruby/yjit 3.4.4
ruby 1-m.rb 1245ms 2.3ms 411.8MB 1757ms 167ms truffleruby 24.2.1
ruby 1.rb 1482ms 5.6ms 12.9MB 1460ms 10ms ruby 3.4.4

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 197ms 3.9ms 13.4MB 183ms 3ms ruby/yjit 3.4.4
ruby 1.rb 290ms 4.2ms 12.8MB 273ms 0ms ruby 3.4.4
ruby 1-m.rb 503ms 50ms 362.6MB 967ms 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 404ms 4.9ms 534.3MB 500ms 93ms openjdk 23
java 1.java 406ms 4.3ms 679.8MB 490ms 90ms openjdk 21
java 1-m.java 408ms 8.7ms 626.3MB 617ms 97ms graal/jvm 17.0.8
java 1.java 1026ms 1.9ms 933.9MB 487ms 690ms openjdk/zgc 21
ruby 1-m.rb 3839ms 65ms 570.9MB 9800ms 350ms truffleruby 24.2.1
ruby 1.rb timeout 0.0ms 94.1MB 4943ms 47ms ruby 3.4.4
ruby 1.rb timeout 0.0ms 97.2MB 4943ms 43ms ruby/yjit 3.4.4

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 167ms 1.6ms 206.1MB 240ms 43ms openjdk 21
java 1-m.java 168ms 1.1ms 158.3MB 247ms 40ms openjdk 23
java 1-m.java 216ms 12ms 253.2MB 367ms 60ms graal/jvm 17.0.8
java 1.java 419ms 8.2ms 341.9MB 217ms 280ms openjdk/zgc 21
ruby 1-m.rb 2093ms 126ms 535.8MB 5357ms 270ms truffleruby 24.2.1
ruby 1.rb 3224ms 7.7ms 38.3MB 3190ms 17ms ruby/yjit 3.4.4
ruby 1.rb 4324ms 12ms 37.6MB 4293ms 13ms ruby 3.4.4

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 445ms 0.4ms 45.0MB 490ms 13ms openjdk 21
java 1.java 446ms 3.8ms 48.4MB 477ms 20ms openjdk 23
java 1.java 447ms 2.3ms 82.2MB 477ms 27ms graal/jvm 17.0.8
java 1.java 577ms 2.1ms 44.8MB 497ms 140ms openjdk/zgc 21
ruby 2.rb 816ms 4.0ms 312.1MB 1050ms 113ms truffleruby 24.2.1
java 2.java 1252ms 5.6ms 639.9MB 1390ms 87ms openjdk 21
java 2.java 1277ms 19ms 794.0MB 1390ms 113ms openjdk 23
java 2.java 3274ms 53ms 2445.6MB 1653ms 1830ms openjdk/zgc 21
ruby 2.rb timeout 0.0ms 12.8MB 4987ms 0ms ruby 3.4.4
ruby 2.rb timeout 0.0ms 13.5MB 4980ms 7ms ruby/yjit 3.4.4

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 120ms 4.0ms 48.0MB 153ms 20ms openjdk 23
java 1.java 122ms 2.1ms 44.9MB 167ms 13ms openjdk 21
java 1-m.java 123ms 4.2ms 81.5MB 157ms 33ms graal/jvm 17.0.8
java 1.java 249ms 3.8ms 44.9MB 157ms 147ms openjdk/zgc 21
java 2-m.java 302ms 22ms 344.8MB 437ms 53ms openjdk 21
ruby 2-m.rb 308ms 14ms 317.9MB 567ms 110ms truffleruby 24.2.1
java 2-m.java 313ms 7.2ms 400.0MB 443ms 70ms openjdk 23
java 2.java 684ms 17ms 532.7MB 467ms 407ms openjdk/zgc 21
ruby 2.rb 1025ms 1.2ms 13.5MB 1003ms 10ms ruby/yjit 3.4.4
ruby 2.rb 2921ms 95ms 12.8MB 2903ms 3ms ruby 3.4.4

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 410ms 3.5ms 115.8MB 463ms 27ms openjdk 21
java 1.java 424ms 3.9ms 118.5MB 467ms 27ms openjdk 23
java 1.java 587ms 6.0ms 112.8MB 493ms 163ms openjdk/zgc 21
java 1-m.java 644ms 25ms 236.7MB 933ms 77ms graal/jvm 17.0.8
java 2.java 782ms 3.1ms 56.9MB 837ms 17ms openjdk 21
java 2.java 786ms 9.6ms 60.5MB 840ms 20ms openjdk 23
java 2.java 847ms 3.9ms 53.2MB 777ms 143ms openjdk/zgc 21
java 2-m.java 1339ms 8.3ms 234.5MB 2410ms 100ms graal/jvm 17.0.8
ruby 1.rb timeout 0.0ms 325.3MB 4857ms 133ms ruby 3.4.4
ruby 1.rb timeout 0.0ms 327.0MB 4853ms 130ms ruby/yjit 3.4.4
ruby 1.rb timeout 0.0ms 732.0MB 5073ms 150ms truffleruby 24.2.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 155ms 2.3ms 68.1MB 200ms 23ms openjdk 23
java 1.java 158ms 3.5ms 64.7MB 210ms 20ms openjdk 21
java 1-m.java 210ms 6.9ms 124.8MB 297ms 47ms graal/jvm 17.0.8
java 2.java 262ms 3.1ms 50.5MB 310ms 23ms openjdk 23
java 2.java 263ms 1.2ms 50.0MB 327ms 20ms openjdk 21
java 1.java 286ms 4.1ms 61.5MB 203ms 150ms openjdk/zgc 21
java 2.java 370ms 2.8ms 47.7MB 303ms 147ms openjdk/zgc 21
java 2-m.java 470ms 6.2ms 199.2MB 830ms 63ms graal/jvm 17.0.8
ruby 1-m.rb 1691ms 6.2ms 486.6MB 2437ms 163ms truffleruby 24.2.1
ruby 1.rb 3458ms 150ms 131.6MB 3363ms 80ms ruby/yjit 3.4.4
ruby 1.rb 4471ms 23ms 131.1MB 4383ms 73ms ruby 3.4.4

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 3209ms 4.7ms 445.5MB 3633ms 100ms graal/jvm 17.0.8
java 1.java 3722ms 68ms 433.0MB 4600ms 107ms openjdk 21
java 1.java 3750ms 35ms 408.8MB 4670ms 107ms openjdk 23
java 1.java timeout 0.0ms 1830.0MB 4663ms 1203ms openjdk/zgc 21
ruby 1.rb timeout 0.0ms 130.1MB 4853ms 137ms ruby 3.4.4
ruby 1.rb timeout 0.0ms 131.0MB 4833ms 157ms ruby/yjit 3.4.4
ruby 1.rb timeout 0.0ms 441.9MB 13307ms 403ms truffleruby 24.2.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 888ms 5.7ms 448.3MB 1230ms 87ms graal/jvm 17.0.8
java 1-m.java 985ms 9.3ms 423.2MB 1833ms 87ms openjdk 21
java 1-m.java 1005ms 39ms 488.4MB 1760ms 110ms openjdk 23
ruby 1.rb 1737ms 69ms 130.2MB 1657ms 63ms ruby 3.4.4
ruby 1-m.rb 1762ms 210ms 387.2MB 4653ms 207ms truffleruby 24.2.1
ruby 1.rb 1805ms 4.1ms 131.2MB 1680ms 113ms ruby/yjit 3.4.4
java 1.java 1983ms 5.7ms 1312.1MB 1770ms 1033ms 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 1987ms 7.3ms 47.4MB 7587ms 27ms openjdk 21
java 2-m.java 2001ms 11ms 48.8MB 7653ms 27ms openjdk 23
java 2-m.java 2120ms 12ms 45.2MB 7633ms 150ms openjdk/zgc 21
java 2-m.java 2521ms 48ms 94.9MB 9407ms 50ms graal/jvm 17.0.8
ruby 4.rb timeout 0.0ms 12.9MB 4980ms 3ms ruby 3.4.4
ruby 4.rb timeout 0.0ms 13.5MB 4980ms 3ms ruby/yjit 3.4.4
ruby 4.rb timeout 0.0ms 442.8MB 5163ms 247ms truffleruby 24.2.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 605ms 4.2ms 47.7MB 2140ms 20ms openjdk 21
java 2-m.java 617ms 2.8ms 48.8MB 2187ms 20ms openjdk 23
java 2-m.java 732ms 8.1ms 45.3MB 2153ms 147ms openjdk/zgc 21
java 2-m.java 776ms 4.7ms 95.1MB 2737ms 43ms graal/jvm 17.0.8
ruby 4.rb 4839ms 22ms 427.6MB 5120ms 207ms truffleruby 24.2.1
ruby 4.rb timeout 0.0ms 12.9MB 4980ms 3ms ruby 3.4.4
ruby 4.rb timeout 0.0ms 13.5MB 4983ms 3ms ruby/yjit 3.4.4

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 248ms 5.2ms 47.7MB 723ms 20ms openjdk 21
java 2-m.java 267ms 4.0ms 48.4MB 787ms 20ms openjdk 23
java 2-m.java 323ms 9.1ms 94.0MB 987ms 43ms graal/jvm 17.0.8
java 2-m.java 387ms 8.0ms 45.5MB 783ms 147ms openjdk/zgc 21
ruby 4.rb 1449ms 47ms 375.2MB 1810ms 133ms truffleruby 24.2.1
ruby 4.rb timeout 0.0ms 12.9MB 4980ms 0ms ruby 3.4.4
ruby 4.rb timeout 0.0ms 13.6MB 4980ms 7ms ruby/yjit 3.4.4