OCaml VS Java benchmarks

Current benchmark data was generated on Wed Jan 22 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 467ms 1.5ms 646.0MB 567ms 97ms openjdk 23
java 2-m.java 468ms 12ms 645.0MB 687ms 90ms graal/jvm 17.0.8
java 2.java 498ms 2.1ms 572.9MB 563ms 113ms openjdk 21
java 2.java 1170ms 8.1ms 1044.5MB 570ms 760ms openjdk/zgc 21
ocaml 1.ml 2977ms 13ms 132.6MB 2900ms 60ms ocaml 5.3.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2.java 126ms 6.8ms 96.2MB 147ms 40ms openjdk 23
java 2.java 127ms 1.9ms 168.9MB 160ms 23ms openjdk 21
java 2-m.java 150ms 3.7ms 231.2MB 210ms 67ms graal/jvm 17.0.8
ocaml 1.ml 214ms 3.1ms 19.2MB 197ms 3ms ocaml 5.3.0
java 2.java 307ms 4.8ms 241.9MB 163ms 197ms openjdk/zgc 21

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 911ms 9.8ms 100.3MB 3347ms 37ms graal/jvm 17.0.8
java 1-m.java 978ms 3.0ms 48.5MB 3633ms 20ms openjdk 21
java 1-m.java 987ms 3.8ms 50.3MB 3620ms 27ms openjdk 23
java 1-m.java 1035ms 18ms 46.4MB 3387ms 133ms openjdk/zgc 21
ocaml 2.ml 2911ms 3.1ms 4.9MB 2900ms 0ms ocaml 5.3.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 181ms 2.4ms 48.3MB 483ms 20ms openjdk 21
java 1-m.java 188ms 5.8ms 50.3MB 470ms 30ms openjdk 23
java 1-m.java 220ms 19ms 101.5MB 580ms 43ms graal/jvm 17.0.8
ocaml 2.ml 245ms 4.0ms 4.9MB 233ms 0ms ocaml 5.3.0
java 1-m.java 296ms 3.4ms 47.5MB 503ms 130ms openjdk/zgc 21

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 6.ml 345ms 2.4ms 24.9MB 333ms 0ms ocaml 5.3.0
java 4.java 443ms 2.7ms 106.4MB 627ms 30ms graal/jvm 17.0.8
java 4.java 452ms 4.1ms 47.5MB 537ms 20ms openjdk 21
java 4.java 457ms 2.3ms 49.1MB 537ms 27ms openjdk 23
java 4.java 563ms 2.8ms 45.2MB 537ms 130ms openjdk/zgc 21

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 6.ml 38ms 0.2ms 7.5MB 23ms 0ms ocaml 5.3.0
java 4.java 125ms 1.5ms 46.5MB 167ms 10ms openjdk 21
java 4-m.java 125ms 2.0ms 47.9MB 170ms 20ms openjdk 23
java 4-m.java 130ms 6.6ms 92.6MB 180ms 33ms graal/jvm 17.0.8
java 4.java 239ms 4.5ms 46.0MB 160ms 133ms openjdk/zgc 21

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 1.9ms 0.2ms 5.0MB 0ms 0ms ocaml 5.3.0
java 1.java 64ms 1.6ms 54.9MB 66ms 18ms graal/jvm 17.0.8
java 1.java 71ms 6.1ms 43.9MB 80ms 16ms openjdk 21
java 1.java 72ms 6.3ms 44.7MB 70ms 20ms openjdk 23
java 1.java 186ms 4.8ms 44.6MB 90ms 126ms openjdk/zgc 21

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 181ms 7.0ms 6.5MB 167ms 0ms ocaml 5.3.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 540ms 16ms 6.6MB 527ms 0ms ocaml 5.3.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 77ms 0.8ms 6.0MB 63ms 0ms ocaml 5.3.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 397ms 2.9ms 630.4MB 593ms 97ms graal/jvm 17.0.8
java 1.java 401ms 1.0ms 537.3MB 483ms 103ms openjdk 23
java 1.java 401ms 4.9ms 679.9MB 467ms 90ms openjdk 21
ocaml 1.ml 1060ms 22ms 71.2MB 1023ms 27ms ocaml 5.3.0
java 1.java 1072ms 7.5ms 966.2MB 473ms 723ms openjdk/zgc 21
ocaml 2.ml 2025ms 10ms 91.8MB 1973ms 37ms ocaml 5.3.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 148ms 2.0ms 21.6MB 133ms 0ms ocaml 5.3.0
java 1-m.java 164ms 3.1ms 207.5MB 237ms 40ms openjdk 21
java 1-m.java 164ms 2.2ms 160.1MB 243ms 37ms openjdk 23
java 1-m.java 207ms 1.6ms 255.6MB 343ms 57ms graal/jvm 17.0.8
ocaml 2.ml 352ms 1.6ms 27.7MB 327ms 7ms ocaml 5.3.0
java 1.java 432ms 23ms 343.8MB 200ms 307ms openjdk/zgc 21

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 373ms 4.8ms 5.3MB 363ms 0ms ocaml 5.3.0
java 1.java 441ms 1.3ms 45.2MB 483ms 17ms openjdk 21
java 1.java 445ms 3.9ms 48.2MB 477ms 23ms openjdk 23
java 1.java 445ms 1.7ms 87.1MB 467ms 30ms graal/jvm 17.0.8
java 1.java 565ms 2.0ms 44.6MB 497ms 127ms openjdk/zgc 21
java 2.java 1252ms 33ms 588.1MB 1390ms 83ms openjdk 21
java 2.java 1255ms 8.3ms 753.6MB 1367ms 107ms openjdk 23
java 2.java 3285ms 56ms 2475.9MB 1647ms 1840ms openjdk/zgc 21

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 40ms 0.1ms 5.3MB 30ms 0ms ocaml 5.3.0
java 1.java 118ms 1.2ms 45.1MB 153ms 20ms openjdk 21
java 1.java 123ms 1.7ms 47.9MB 153ms 20ms openjdk 23
java 1.java 123ms 6.2ms 87.3MB 157ms 27ms graal/jvm 17.0.8
java 1.java 237ms 4.3ms 44.7MB 157ms 137ms openjdk/zgc 21
java 2-m.java 299ms 2.8ms 344.9MB 437ms 53ms openjdk 21
java 2-m.java 311ms 5.4ms 346.3MB 443ms 70ms openjdk 23
java 2.java 689ms 16ms 525.9MB 463ms 403ms openjdk/zgc 21

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 402ms 0.4ms 118.1MB 447ms 20ms openjdk 23
java 1.java 409ms 10ms 115.0MB 467ms 17ms openjdk 21
java 1.java 566ms 4.4ms 112.7MB 467ms 160ms openjdk/zgc 21
java 1-m.java 613ms 19ms 236.5MB 893ms 70ms graal/jvm 17.0.8
java 2.java 783ms 1.3ms 57.6MB 843ms 20ms openjdk 21
java 2.java 788ms 14ms 60.7MB 843ms 17ms openjdk 23
java 2.java 838ms 5.5ms 53.0MB 770ms 140ms openjdk/zgc 21
ocaml 1.ml 914ms 6.3ms 552.5MB 853ms 43ms ocaml 5.3.0
java 2-m.java 1347ms 43ms 203.8MB 2387ms 103ms graal/jvm 17.0.8
ocaml 2.ml 1875ms 8.7ms 18.6MB 1857ms 0ms ocaml 5.3.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 155ms 5.6ms 68.1MB 207ms 20ms openjdk 23
java 1.java 157ms 1.5ms 64.9MB 207ms 17ms openjdk 21
ocaml 1.ml 176ms 3.5ms 142.3MB 153ms 7ms ocaml 5.3.0
java 1-m.java 200ms 4.4ms 130.6MB 273ms 43ms graal/jvm 17.0.8
java 2.java 260ms 2.9ms 50.2MB 320ms 23ms openjdk 21
java 2.java 266ms 6.5ms 50.5MB 307ms 23ms openjdk 23
java 1.java 285ms 4.9ms 63.4MB 210ms 140ms openjdk/zgc 21
java 2.java 365ms 1.7ms 47.4MB 303ms 133ms openjdk/zgc 21
ocaml 2.ml 466ms 4.9ms 9.1MB 453ms 0ms ocaml 5.3.0
java 2-m.java 486ms 11ms 151.2MB 857ms 67ms graal/jvm 17.0.8

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 3.java timeout 0.0ms 411.6MB 5427ms 77ms graal/jvm 17.0.8
java 3.java timeout 0.0ms 302.6MB 5350ms 47ms openjdk 21
java 3.java timeout 0.0ms 304.6MB 5303ms 60ms openjdk 23
java 3.java timeout 0.0ms 468.8MB 4957ms 313ms openjdk/zgc 21
ocaml 2.ml timeout 0.0ms 484.8MB 4803ms 180ms ocaml 5.3.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 545ms 6.3ms 57.2MB 507ms 27ms ocaml 5.3.0
java 3-m.java 771ms 11ms 181.0MB 1147ms 53ms graal/jvm 17.0.8
java 3-m.java 820ms 17ms 131.5MB 1230ms 23ms openjdk 21
java 3-m.java 828ms 41ms 132.5MB 1230ms 40ms openjdk 23
java 3.java 958ms 13ms 132.5MB 1157ms 173ms 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 1963ms 2.5ms 47.3MB 7453ms 20ms openjdk 21
java 2-m.java 1965ms 7.5ms 48.6MB 7467ms 17ms openjdk 23
java 2-m.java 2080ms 2.7ms 45.3MB 7453ms 143ms openjdk/zgc 21
java 2-m.java 2480ms 17ms 98.9MB 8800ms 40ms graal/jvm 17.0.8
ocaml 2.ml 4564ms 17ms 6.3MB 4553ms 0ms ocaml 5.3.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 592ms 8.0ms 47.7MB 2083ms 13ms openjdk 21
java 2-m.java 592ms 6.7ms 48.8MB 2033ms 30ms openjdk 23
java 2-m.java 712ms 1.7ms 45.3MB 2087ms 133ms openjdk/zgc 21
java 2-m.java 739ms 6.2ms 98.0MB 2493ms 37ms graal/jvm 17.0.8
ocaml 2.ml 1141ms 5.8ms 6.1MB 1130ms 0ms ocaml 5.3.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 246ms 3.6ms 48.5MB 717ms 20ms openjdk 23
java 2-m.java 247ms 13ms 47.4MB 710ms 23ms openjdk 21
java 2-m.java 285ms 13ms 96.7MB 827ms 40ms graal/jvm 17.0.8
ocaml 2.ml 292ms 4.1ms 5.3MB 283ms 0ms ocaml 5.3.0
java 2-m.java 355ms 6.7ms 47.3MB 680ms 137ms openjdk/zgc 21