OCaml VS Java benchmarks

Current benchmark data was generated on Mon Jun 23 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 460ms 10ms 573.4MB 563ms 83ms openjdk 21
java 2-m.java 468ms 7.1ms 643.1MB 657ms 120ms graal/jvm 17.0.8
java 2.java 476ms 4.7ms 636.3MB 577ms 107ms openjdk 23
java 2.java 1176ms 4.0ms 1040.7MB 573ms 763ms openjdk/zgc 21
ocaml 1.ml 3028ms 44ms 157.2MB 2940ms 73ms ocaml 5.3.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 124ms 0.8ms 96.2MB 163ms 30ms openjdk 23
java 2.java 125ms 2.0ms 167.1MB 157ms 30ms openjdk 21
java 2-m.java 147ms 1.3ms 215.1MB 227ms 50ms graal/jvm 17.0.8
ocaml 1.ml 214ms 0.9ms 19.1MB 200ms 0ms ocaml 5.3.0
java 2.java 313ms 2.8ms 241.6MB 160ms 207ms 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 896ms 13ms 96.0MB 3307ms 33ms graal/jvm 17.0.8
java 1-m.java 961ms 49ms 50.1MB 3533ms 27ms openjdk 23
java 1-m.java 978ms 5.1ms 48.4MB 3640ms 23ms openjdk 21
java 1-m.java 1025ms 28ms 45.9MB 3340ms 137ms openjdk/zgc 21
ocaml 2.ml 2914ms 16ms 4.9MB 2907ms 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 176ms 6.3ms 48.5MB 477ms 23ms openjdk 21
java 1-m.java 188ms 2.9ms 95.8MB 510ms 43ms graal/jvm 17.0.8
java 1-m.java 193ms 4.2ms 50.0MB 503ms 23ms openjdk 23
ocaml 2.ml 245ms 3.3ms 4.9MB 237ms 0ms ocaml 5.3.0
java 1-m.java 302ms 9.2ms 45.7MB 497ms 140ms openjdk/zgc 21

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 6.ml 347ms 1.7ms 24.8MB 337ms 0ms ocaml 5.3.0
java 4.java 440ms 0.8ms 101.3MB 613ms 40ms graal/jvm 17.0.8
java 4.java 455ms 1.2ms 47.4MB 540ms 20ms openjdk 21
java 4.java 464ms 8.6ms 49.5MB 557ms 23ms openjdk 23
java 4.java 570ms 2.0ms 45.1MB 537ms 140ms openjdk/zgc 21

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 6.ml 39ms 0.5ms 7.5MB 30ms 0ms ocaml 5.3.0
java 4-m.java 121ms 7.1ms 46.9MB 167ms 20ms openjdk 21
java 4.java 124ms 4.2ms 48.6MB 163ms 20ms openjdk 23
java 4-m.java 129ms 11ms 95.3MB 180ms 37ms graal/jvm 17.0.8
java 4.java 244ms 1.8ms 44.0MB 163ms 140ms openjdk/zgc 21

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 1.8ms 0.2ms 5.0MB 0ms 0ms ocaml 5.3.0
java 1.java 64ms 2.4ms 52.4MB 66ms 18ms graal/jvm 17.0.8
java 1.java 72ms 4.4ms 44.7MB 78ms 16ms openjdk 23
java 1.java 73ms 4.9ms 43.8MB 76ms 20ms openjdk 21
java 1.java 192ms 4.4ms 42.8MB 80ms 136ms openjdk/zgc 21

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 190ms 0.6ms 6.4MB 180ms 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 518ms 3.2ms 6.6MB 510ms 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 1.4ms 5.9MB 70ms 0ms ocaml 5.3.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 399ms 2.4ms 541.9MB 497ms 87ms openjdk 23
java 1.java 408ms 5.6ms 680.1MB 483ms 90ms openjdk 21
java 1-m.java 440ms 67ms 657.5MB 653ms 120ms graal/jvm 17.0.8
java 1.java 1057ms 29ms 961.6MB 450ms 737ms openjdk/zgc 21
ocaml 1.ml 1094ms 11ms 70.2MB 1047ms 30ms ocaml 5.3.0
ocaml 2.ml 2066ms 16ms 91.8MB 2013ms 33ms ocaml 5.3.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 147ms 4.1ms 21.7MB 130ms 7ms ocaml 5.3.0
java 1-m.java 162ms 3.2ms 158.1MB 240ms 33ms openjdk 23
java 1-m.java 165ms 0.9ms 206.3MB 233ms 43ms openjdk 21
java 1-m.java 213ms 5.0ms 253.5MB 343ms 70ms graal/jvm 17.0.8
ocaml 2.ml 367ms 7.6ms 27.7MB 343ms 7ms ocaml 5.3.0
java 1.java 415ms 9.6ms 341.9MB 217ms 273ms openjdk/zgc 21

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 373ms 1.9ms 5.2MB 360ms 0ms ocaml 5.3.0
java 1.java 441ms 5.0ms 45.2MB 473ms 17ms openjdk 21
java 1.java 449ms 1.1ms 47.9MB 480ms 20ms openjdk 23
java 1.java 450ms 4.6ms 81.4MB 480ms 23ms graal/jvm 17.0.8
java 1.java 573ms 3.6ms 44.8MB 497ms 140ms openjdk/zgc 21
java 2.java 1253ms 11ms 668.0MB 1373ms 93ms openjdk 21
java 2.java 1255ms 4.2ms 766.6MB 1373ms 100ms openjdk 23
java 2.java 3285ms 47ms 2400.8MB 1683ms 1837ms openjdk/zgc 21

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 41ms 1.4ms 5.2MB 30ms 0ms ocaml 5.3.0
java 1.java 118ms 2.7ms 81.6MB 150ms 27ms graal/jvm 17.0.8
java 1.java 124ms 1.2ms 48.5MB 157ms 23ms openjdk 23
java 1.java 135ms 27ms 45.4MB 153ms 13ms openjdk 21
java 1.java 249ms 2.6ms 44.8MB 167ms 143ms openjdk/zgc 21
java 2-m.java 295ms 10ms 352.2MB 433ms 50ms openjdk 21
java 2-m.java 313ms 6.2ms 395.9MB 450ms 63ms openjdk 23
java 2.java 705ms 8.5ms 535.8MB 483ms 417ms openjdk/zgc 21

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 414ms 0.9ms 118.0MB 460ms 23ms openjdk 23
java 1.java 423ms 11ms 115.3MB 473ms 20ms openjdk 21
java 1.java 597ms 9.6ms 112.7MB 500ms 163ms openjdk/zgc 21
java 1-m.java 607ms 8.4ms 214.2MB 883ms 67ms graal/jvm 17.0.8
java 2.java 783ms 3.4ms 57.1MB 847ms 17ms openjdk 21
java 2.java 790ms 3.7ms 60.7MB 843ms 17ms openjdk 23
java 2.java 854ms 2.8ms 53.3MB 787ms 147ms openjdk/zgc 21
ocaml 1.ml 957ms 3.4ms 550.3MB 900ms 43ms ocaml 5.3.0
java 2-m.java 1346ms 23ms 259.9MB 2400ms 117ms graal/jvm 17.0.8
ocaml 2.ml 1886ms 14ms 18.9MB 1873ms 0ms ocaml 5.3.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 153ms 0.8ms 68.2MB 200ms 20ms openjdk 23
java 1.java 158ms 2.0ms 64.8MB 213ms 13ms openjdk 21
ocaml 1.ml 191ms 3.0ms 141.6MB 170ms 10ms ocaml 5.3.0
java 1-m.java 211ms 22ms 124.9MB 297ms 47ms graal/jvm 17.0.8
java 2.java 265ms 7.5ms 50.3MB 313ms 20ms openjdk 23
java 2.java 271ms 12ms 50.0MB 337ms 20ms openjdk 21
java 1.java 291ms 0.1ms 61.5MB 213ms 150ms openjdk/zgc 21
java 2.java 377ms 6.4ms 47.6MB 310ms 147ms openjdk/zgc 21
ocaml 2.ml 471ms 4.3ms 9.1MB 460ms 0ms ocaml 5.3.0
java 2-m.java 475ms 9.9ms 145.5MB 853ms 57ms 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 407.0MB 5410ms 93ms graal/jvm 17.0.8
java 3.java timeout 0.0ms 301.8MB 5317ms 57ms openjdk 21
java 3.java timeout 0.0ms 304.7MB 5323ms 63ms openjdk 23
java 3.java timeout 0.0ms 468.6MB 4977ms 290ms openjdk/zgc 21
ocaml 2.ml timeout 0.0ms 462.9MB 4830ms 153ms ocaml 5.3.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 549ms 4.5ms 57.1MB 513ms 23ms ocaml 5.3.0
java 3-m.java 783ms 10ms 177.2MB 1163ms 57ms graal/jvm 17.0.8
java 3-m.java 799ms 9.6ms 128.8MB 1183ms 30ms openjdk 21
java 3-m.java 810ms 6.7ms 136.5MB 1217ms 37ms openjdk 23
java 3.java 979ms 21ms 132.9MB 1173ms 183ms 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 1986ms 16ms 47.3MB 7597ms 23ms openjdk 21
java 2-m.java 1998ms 10ms 48.7MB 7633ms 23ms openjdk 23
java 2-m.java 2113ms 11ms 45.6MB 7603ms 150ms openjdk/zgc 21
java 2-m.java 2529ms 6.7ms 95.2MB 9463ms 47ms graal/jvm 17.0.8
ocaml 2.ml 4582ms 24ms 6.4MB 4570ms 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 602ms 2.8ms 48.8MB 2140ms 20ms openjdk 23
java 2-m.java 605ms 4.7ms 47.7MB 2143ms 23ms openjdk 21
java 2-m.java 745ms 4.0ms 45.6MB 2200ms 147ms openjdk/zgc 21
java 2-m.java 772ms 10ms 94.7MB 2710ms 40ms graal/jvm 17.0.8
ocaml 2.ml 1159ms 5.5ms 6.1MB 1150ms 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 247ms 2.2ms 47.7MB 747ms 20ms openjdk 21
java 2-m.java 257ms 13ms 48.3MB 773ms 20ms openjdk 23
ocaml 2.ml 294ms 4.6ms 5.2MB 283ms 0ms ocaml 5.3.0
java 2-m.java 294ms 26ms 93.1MB 890ms 33ms graal/jvm 17.0.8
java 2-m.java 386ms 9.7ms 45.6MB 763ms 153ms openjdk/zgc 21