OCaml VS Java benchmarks

Current benchmark data was generated on Tue Mar 25 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.4ms 576.1MB 560ms 83ms openjdk 21
java 2-m.java 468ms 4.5ms 644.9MB 643ms 120ms graal/jvm 17.0.8
java 2.java 483ms 9.4ms 620.6MB 587ms 107ms openjdk 23
java 2.java 1240ms 21ms 1086.3MB 587ms 817ms openjdk/zgc 21
ocaml 1.ml 3139ms 30ms 157.2MB 3050ms 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 123ms 4.3ms 98.7MB 163ms 30ms openjdk 23
java 2.java 125ms 5.0ms 169.0MB 153ms 33ms openjdk 21
java 2-m.java 150ms 9.1ms 225.3MB 223ms 57ms graal/jvm 17.0.8
ocaml 1.ml 228ms 11ms 19.2MB 213ms 0ms ocaml 5.3.0
java 2.java 306ms 2.8ms 241.6MB 150ms 210ms 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 894ms 11ms 95.4MB 3297ms 43ms graal/jvm 17.0.8
java 1-m.java 974ms 4.1ms 48.1MB 3630ms 23ms openjdk 21
java 1-m.java 991ms 2.3ms 50.2MB 3637ms 23ms openjdk 23
java 1-m.java 1026ms 24ms 45.7MB 3350ms 143ms openjdk/zgc 21
ocaml 2.ml 2918ms 4.8ms 4.9MB 2910ms 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 182ms 6.0ms 48.3MB 493ms 27ms openjdk 21
java 1-m.java 195ms 3.7ms 50.0MB 510ms 20ms openjdk 23
java 1-m.java 210ms 15ms 96.2MB 583ms 43ms graal/jvm 17.0.8
ocaml 2.ml 245ms 1.4ms 4.9MB 237ms 0ms ocaml 5.3.0
java 1-m.java 307ms 8.3ms 46.8MB 500ms 143ms openjdk/zgc 21

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 6.ml 345ms 0.3ms 24.8MB 330ms 0ms ocaml 5.3.0
java 4.java 445ms 1.1ms 102.4MB 620ms 43ms graal/jvm 17.0.8
java 4.java 456ms 0.4ms 47.7MB 537ms 23ms openjdk 21
java 4.java 456ms 5.6ms 49.1MB 543ms 20ms openjdk 23
java 4.java 571ms 8.5ms 45.1MB 543ms 137ms openjdk/zgc 21

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 6.ml 39ms 0.3ms 7.3MB 30ms 0ms ocaml 5.3.0
java 4-m.java 124ms 5.6ms 91.1MB 173ms 30ms graal/jvm 17.0.8
java 4-m.java 125ms 2.1ms 46.7MB 167ms 23ms openjdk 21
java 4.java 127ms 5.7ms 48.5MB 173ms 13ms openjdk 23
java 4.java 246ms 8.1ms 44.0MB 170ms 137ms 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.1MB 0ms 0ms ocaml 5.3.0
java 1.java 63ms 2.8ms 52.7MB 70ms 16ms graal/jvm 17.0.8
java 1.java 65ms 2.6ms 43.7MB 74ms 16ms openjdk 21
java 1.java 69ms 4.7ms 44.7MB 72ms 16ms openjdk 23
java 1.java 199ms 6.8ms 42.9MB 84ms 138ms openjdk/zgc 21

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 178ms 2.2ms 6.4MB 170ms 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 535ms 18ms 6.6MB 523ms 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.5ms 6.1MB 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 402ms 1.4ms 539.4MB 503ms 83ms openjdk 23
java 1.java 403ms 0.8ms 679.7MB 470ms 100ms openjdk 21
java 1-m.java 407ms 4.5ms 624.7MB 617ms 97ms graal/jvm 17.0.8
ocaml 1.ml 1104ms 1.1ms 70.3MB 1060ms 30ms ocaml 5.3.0
java 1.java 1109ms 14ms 993.0MB 460ms 777ms openjdk/zgc 21
ocaml 2.ml 2279ms 5.8ms 91.8MB 2220ms 43ms ocaml 5.3.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 149ms 3.1ms 21.6MB 130ms 7ms ocaml 5.3.0
java 1-m.java 163ms 1.4ms 158.5MB 237ms 47ms openjdk 23
java 1-m.java 167ms 4.0ms 206.4MB 237ms 47ms openjdk 21
java 1-m.java 214ms 4.0ms 253.3MB 350ms 63ms graal/jvm 17.0.8
ocaml 2.ml 396ms 3.4ms 27.7MB 377ms 7ms ocaml 5.3.0
java 1.java 427ms 11ms 341.8MB 217ms 287ms openjdk/zgc 21

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 374ms 0.4ms 5.3MB 367ms 0ms ocaml 5.3.0
java 1.java 445ms 1.2ms 45.1MB 487ms 17ms openjdk 21
java 1.java 448ms 0.8ms 48.1MB 483ms 20ms openjdk 23
java 1.java 451ms 5.3ms 82.3MB 480ms 30ms graal/jvm 17.0.8
java 1.java 570ms 6.7ms 44.6MB 483ms 140ms openjdk/zgc 21
java 2.java 1247ms 8.3ms 612.0MB 1383ms 87ms openjdk 21
java 2.java 1263ms 12ms 761.8MB 1380ms 107ms openjdk 23
java 2.java 3428ms 91ms 2585.6MB 1647ms 1983ms openjdk/zgc 21

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 41ms 0.7ms 5.2MB 30ms 0ms ocaml 5.3.0
java 1.java 120ms 1.3ms 45.2MB 160ms 20ms openjdk 21
java 1.java 122ms 3.4ms 48.0MB 157ms 17ms openjdk 23
java 1.java 126ms 6.4ms 81.5MB 157ms 30ms graal/jvm 17.0.8
java 1.java 255ms 8.1ms 44.8MB 173ms 147ms openjdk/zgc 21
java 2-m.java 305ms 1.9ms 374.3MB 440ms 63ms openjdk 21
java 2-m.java 314ms 3.5ms 404.5MB 453ms 67ms openjdk 23
java 2.java 718ms 16ms 545.0MB 480ms 433ms openjdk/zgc 21

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 414ms 8.0ms 115.1MB 463ms 23ms openjdk 21
java 1.java 417ms 11ms 118.0MB 453ms 27ms openjdk 23
java 1.java 598ms 4.7ms 112.6MB 497ms 167ms openjdk/zgc 21
java 1-m.java 645ms 4.3ms 256.4MB 920ms 83ms graal/jvm 17.0.8
java 2.java 783ms 3.4ms 57.0MB 837ms 23ms openjdk 21
java 2.java 785ms 6.3ms 60.3MB 833ms 23ms openjdk 23
java 2.java 856ms 3.3ms 53.4MB 780ms 150ms openjdk/zgc 21
ocaml 1.ml 1019ms 4.4ms 544.4MB 960ms 43ms ocaml 5.3.0
java 2-m.java 1326ms 70ms 214.5MB 2320ms 103ms graal/jvm 17.0.8
ocaml 2.ml 1896ms 11ms 17.2MB 1883ms 0ms ocaml 5.3.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 158ms 11ms 68.1MB 193ms 30ms openjdk 23
java 1.java 159ms 1.7ms 64.7MB 210ms 20ms openjdk 21
ocaml 1.ml 197ms 0.6ms 128.8MB 173ms 10ms ocaml 5.3.0
java 1-m.java 209ms 17ms 124.7MB 293ms 43ms graal/jvm 17.0.8
java 2.java 261ms 1.6ms 50.5MB 313ms 17ms openjdk 23
java 2.java 261ms 1.8ms 49.9MB 320ms 20ms openjdk 21
java 1.java 292ms 2.3ms 61.4MB 210ms 157ms openjdk/zgc 21
java 2.java 371ms 7.0ms 47.7MB 307ms 143ms openjdk/zgc 21
ocaml 2.ml 469ms 5.3ms 9.1MB 457ms 0ms ocaml 5.3.0
java 2-m.java 474ms 3.4ms 194.3MB 833ms 70ms 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.4MB 5410ms 90ms graal/jvm 17.0.8
java 3.java timeout 0.0ms 302.6MB 5333ms 60ms openjdk 21
java 3.java timeout 0.0ms 304.8MB 5323ms 57ms openjdk 23
java 3.java timeout 0.0ms 466.5MB 4970ms 297ms openjdk/zgc 21
ocaml 2.ml timeout 0.0ms 462.7MB 4810ms 173ms ocaml 5.3.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 550ms 6.1ms 57.1MB 507ms 27ms ocaml 5.3.0
java 3-m.java 780ms 19ms 175.3MB 1153ms 60ms graal/jvm 17.0.8
java 3-m.java 796ms 7.9ms 132.5MB 1203ms 33ms openjdk 23
java 3-m.java 796ms 1.8ms 130.5MB 1183ms 37ms openjdk 21
java 3.java 981ms 13ms 133.4MB 1140ms 190ms 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 1990ms 4.9ms 48.3MB 7590ms 23ms openjdk 21
java 2-m.java 2007ms 4.6ms 48.8MB 7640ms 23ms openjdk 23
java 2-m.java 2118ms 9.6ms 45.4MB 7597ms 150ms openjdk/zgc 21
java 2-m.java 2519ms 21ms 94.5MB 9413ms 47ms graal/jvm 17.0.8
ocaml 2.ml 4585ms 15ms 6.4MB 4573ms 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 603ms 2.9ms 47.6MB 2127ms 23ms openjdk 21
java 2-m.java 618ms 4.6ms 49.0MB 2187ms 27ms openjdk 23
java 2-m.java 737ms 4.9ms 45.5MB 2160ms 147ms openjdk/zgc 21
java 2-m.java 775ms 11ms 95.1MB 2713ms 43ms graal/jvm 17.0.8
ocaml 2.ml 1148ms 6.8ms 6.1MB 1140ms 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 255ms 0.5ms 47.6MB 760ms 23ms openjdk 21
java 2-m.java 259ms 11ms 48.6MB 767ms 20ms openjdk 23
ocaml 2.ml 296ms 5.1ms 5.2MB 287ms 0ms ocaml 5.3.0
java 2-m.java 305ms 26ms 96.4MB 910ms 50ms graal/jvm 17.0.8
java 2-m.java 384ms 3.8ms 45.7MB 763ms 150ms openjdk/zgc 21