OCaml VS Java benchmarks

Current benchmark data was generated on Wed Feb 08 2023, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8171M CPU @ 2.60GHz (Model 85)

* -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 801ms 7.2ms 410.2MB 787ms 150ms openjdk 19
java 2.java 840ms 20ms 365.5MB 1003ms 133ms graal/jvm 17.0.6
java 2.java 855ms 43ms 607.0MB 807ms 183ms openjdk 20
java 2.java 1671ms 35ms 1188.8MB 1013ms 860ms openjdk/zgc 19
ocaml 1.ml timeout 0.0ms 139.4MB 4927ms 50ms ocaml 5.0.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2.java 201ms 6.2ms 107.5MB 197ms 33ms openjdk 20
java 2.java 222ms 16ms 163.9MB 250ms 60ms graal/jvm 17.0.6
java 2.java 223ms 26ms 111.0MB 197ms 37ms openjdk 19
java 2.java 383ms 9.9ms 238.2MB 210ms 197ms openjdk/zgc 19
ocaml 1.ml 395ms 6.2ms 22.9MB 363ms 13ms ocaml 5.0.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 1774ms 119ms 93.2MB 3357ms 30ms graal/jvm 17.0.6
java 1-m.java 1803ms 54ms 43.7MB 3437ms 17ms openjdk 19
java 1-m.java 1850ms 41ms 40.5MB 3520ms 20ms openjdk 20
java 1-m.java 1957ms 64ms 43.8MB 3607ms 77ms openjdk/zgc 19
ocaml 2.ml 4303ms 54ms 2.8MB 4290ms 0ms ocaml 5.0.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 294ms 13ms 43.5MB 470ms 13ms openjdk 19
java 1-m.java 297ms 6.3ms 40.7MB 457ms 23ms openjdk 20
java 1-m.java 311ms 15ms 91.7MB 490ms 43ms graal/jvm 17.0.6
java 1-m.java 349ms 2.4ms 43.5MB 463ms 73ms openjdk/zgc 19
ocaml 2.ml 356ms 7.7ms 2.9MB 343ms 0ms ocaml 5.0.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 6.ml 450ms 2.9ms 22.7MB 433ms 3ms ocaml 5.0.0
java 4.java 554ms 15ms 40.1MB 633ms 23ms openjdk 20
java 4.java 564ms 18ms 41.4MB 653ms 13ms openjdk 19
java 4.java 621ms 18ms 42.0MB 637ms 83ms openjdk/zgc 19
java 4.java 646ms 8.9ms 101.0MB 870ms 50ms graal/jvm 17.0.6

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 6.ml 50ms 0.4ms 4.9MB 37ms 0ms ocaml 5.0.0
java 4.java 168ms 9.5ms 41.0MB 187ms 20ms openjdk 19
java 4.java 175ms 13ms 39.5MB 180ms 27ms openjdk 20
java 4.java 175ms 5.0ms 87.4MB 200ms 40ms graal/jvm 17.0.6
java 4.java 233ms 7.1ms 41.9MB 190ms 77ms openjdk/zgc 19

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 2.6ms 0.9ms 2.9MB 0ms 0ms ocaml 5.0.0
java 1.java 92ms 4.3ms 65.3MB 88ms 14ms graal/jvm 17.0.6
java 1.java 93ms 5.9ms 42.0MB 84ms 14ms openjdk 19
java 1.java 96ms 8.2ms 39.1MB 92ms 16ms openjdk 20
java 1.java 158ms 14ms 41.4MB 84ms 82ms openjdk/zgc 19

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 290ms 2.9ms 6.7MB 277ms 0ms ocaml 5.0.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 860ms 8.8ms 6.8MB 847ms 0ms ocaml 5.0.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 130ms 0.3ms 5.9MB 120ms 0ms ocaml 5.0.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 638ms 8.3ms 288.6MB 647ms 103ms openjdk 20
java 1.java 654ms 15ms 368.8MB 683ms 97ms openjdk 19
java 1.java 677ms 7.2ms 345.2MB 840ms 140ms graal/jvm 17.0.6
java 1.java 1201ms 20ms 760.4MB 800ms 567ms openjdk/zgc 19
ocaml 1.ml 2018ms 8.8ms 69.1MB 1967ms 33ms ocaml 5.0.0
ocaml 2.ml 3866ms 14ms 74.3MB 3803ms 47ms ocaml 5.0.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 262ms 3.6ms 173.9MB 293ms 40ms openjdk 19
java 1.java 286ms 5.3ms 222.6MB 287ms 67ms openjdk 20
ocaml 1.ml 296ms 3.1ms 25.8MB 263ms 10ms ocaml 5.0.0
java 1-m.java 345ms 9.1ms 280.6MB 463ms 87ms graal/jvm 17.0.6
java 1.java 513ms 64ms 321.3MB 320ms 237ms openjdk/zgc 19
ocaml 2.ml 685ms 5.7ms 30.2MB 653ms 13ms ocaml 5.0.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 668ms 18ms 2.9MB 653ms 0ms ocaml 5.0.0
java 1.java 688ms 13ms 89.8MB 730ms 17ms graal/jvm 17.0.6
java 1.java 755ms 7.1ms 40.4MB 757ms 27ms openjdk 20
java 1.java 764ms 8.1ms 43.4MB 763ms 23ms openjdk 19
java 1.java 846ms 17ms 44.4MB 793ms 80ms openjdk/zgc 19
java 2.java 2324ms 28ms 656.4MB 2277ms 213ms openjdk 20
java 2.java 2338ms 11ms 550.4MB 2307ms 183ms openjdk 19
java 2.java 3688ms 40ms 1609.1MB 2637ms 1277ms openjdk/zgc 19

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 74ms 3.1ms 2.9MB 63ms 0ms ocaml 5.0.0
java 1.java 180ms 4.4ms 89.8MB 207ms 33ms graal/jvm 17.0.6
java 1.java 184ms 8.6ms 40.5MB 193ms 17ms openjdk 20
java 1.java 188ms 4.0ms 43.6MB 197ms 17ms openjdk 19
java 1.java 247ms 5.2ms 42.4MB 193ms 83ms openjdk/zgc 19
java 2.java 511ms 7.9ms 354.7MB 550ms 113ms openjdk 20
java 2.java 520ms 20ms 355.3MB 567ms 123ms openjdk 19
java 2.java 890ms 59ms 506.8MB 663ms 393ms openjdk/zgc 19

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2.java 1197ms 8.4ms 50.4MB 1237ms 20ms openjdk 20
java 1.java 1211ms 11ms 84.4MB 1233ms 30ms openjdk 19
java 1.java 1227ms 46ms 84.6MB 1247ms 40ms openjdk 20
java 2.java 1260ms 8.6ms 53.6MB 1313ms 13ms openjdk 19
java 2.java 1326ms 4.8ms 52.5MB 1300ms 87ms openjdk/zgc 19
java 1.java 1425ms 29ms 110.6MB 1363ms 120ms openjdk/zgc 19
java 1.java 1684ms 26ms 239.6MB 2347ms 127ms graal/jvm 17.0.6
java 2-m.java 2194ms 21ms 206.3MB 3857ms 123ms graal/jvm 17.0.6
ocaml 1.ml 2737ms 6.5ms 550.4MB 2570ms 153ms ocaml 5.0.0
ocaml 2.ml 3263ms 200ms 19.0MB 3240ms 7ms ocaml 5.0.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 277ms 2.7ms 58.4MB 297ms 27ms openjdk 20
java 1.java 285ms 2.3ms 59.6MB 293ms 37ms openjdk 19
java 1.java 363ms 18ms 60.8MB 327ms 97ms openjdk/zgc 19
java 2.java 378ms 7.9ms 45.1MB 420ms 13ms openjdk 20
java 2.java 401ms 11ms 50.0MB 427ms 23ms openjdk 19
java 1.java 401ms 13ms 121.8MB 540ms 60ms graal/jvm 17.0.6
java 2.java 465ms 9.2ms 44.2MB 430ms 87ms openjdk/zgc 19
ocaml 1.ml 557ms 15ms 140.2MB 507ms 33ms ocaml 5.0.0
java 2-m.java 786ms 5.5ms 148.8MB 1357ms 80ms graal/jvm 17.0.6
ocaml 2.ml 811ms 68ms 9.1MB 797ms 0ms ocaml 5.0.0

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 251.6MB 5393ms 100ms graal/jvm 17.0.6
java 3.java timeout 0.0ms 208.2MB 5320ms 77ms openjdk 19
java 3.java timeout 0.0ms 204.2MB 5303ms 73ms openjdk 20
java 3.java timeout 0.0ms 335.7MB 4947ms 290ms openjdk/zgc 19
ocaml 2.ml timeout 0.0ms 125.5MB 4923ms 50ms ocaml 5.0.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 818ms 6.0ms 52.5MB 780ms 20ms ocaml 5.0.0
java 3.java 1186ms 15ms 111.3MB 1563ms 53ms openjdk 19
java 3.java 1196ms 24ms 169.4MB 1687ms 60ms graal/jvm 17.0.6
java 3.java 1201ms 11ms 112.5MB 1597ms 50ms openjdk 20
java 3.java 1337ms 14ms 159.1MB 1487ms 187ms openjdk/zgc 19

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2.java timeout 0.0ms 91.1MB 9620ms 57ms graal/jvm 17.0.6
java 2.java timeout 0.0ms 44.6MB 9673ms 23ms openjdk 19
java 2.java timeout 0.0ms 40.7MB 9670ms 23ms openjdk 20
java 2.java timeout 0.0ms 44.1MB 9580ms 63ms openjdk/zgc 19
ocaml 2.ml timeout 0.0ms 4.0MB 4983ms 0ms ocaml 5.0.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 1423ms 72ms 91.9MB 2637ms 30ms graal/jvm 17.0.6
ocaml 2.ml 1802ms 7.5ms 3.6MB 1787ms 0ms ocaml 5.0.0
java 2-m.java 2021ms 51ms 41.9MB 3780ms 30ms openjdk 19
java 2-m.java 2159ms 141ms 43.9MB 3967ms 80ms openjdk/zgc 19
java 2-m.java 2484ms 111ms 40.8MB 4717ms 20ms openjdk 20

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 475ms 16ms 3.4MB 460ms 0ms ocaml 5.0.0
java 2-m.java 505ms 14ms 93.3MB 827ms 33ms graal/jvm 17.0.6
java 2-m.java 685ms 36ms 43.9MB 1207ms 23ms openjdk 19
java 2-m.java 719ms 39ms 42.2MB 1160ms 83ms openjdk/zgc 19
java 2-m.java 801ms 105ms 41.1MB 1323ms 20ms openjdk 20