OCaml VS Java benchmarks

Current benchmark data was generated on Tue Dec 31 2024, 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 428ms 6.0ms 574.2MB 503ms 83ms openjdk 21
java 2-m.java 448ms 5.4ms 648.6MB 620ms 120ms graal/jvm 17.0.8
java 2.java 451ms 8.7ms 650.1MB 557ms 87ms openjdk 23
java 2.java 1140ms 6.2ms 1085.8MB 540ms 753ms openjdk/zgc 21
ocaml 1.ml 2855ms 30ms 132.4MB 2783ms 53ms ocaml 5.2.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 117ms 3.3ms 167.6MB 147ms 30ms openjdk 21
java 2.java 122ms 6.2ms 98.2MB 143ms 33ms openjdk 23
java 2-m.java 153ms 9.8ms 226.4MB 223ms 60ms graal/jvm 17.0.8
ocaml 1.ml 205ms 3.3ms 19.1MB 187ms 0ms ocaml 5.2.1
java 2.java 289ms 1.8ms 241.5MB 147ms 187ms 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 859ms 20ms 100.0MB 3133ms 30ms graal/jvm 17.0.8
java 1-m.java 901ms 28ms 48.5MB 3350ms 20ms openjdk 21
java 1-m.java 939ms 5.5ms 50.3MB 3437ms 33ms openjdk 23
java 1-m.java 1000ms 15ms 46.4MB 3263ms 133ms openjdk/zgc 21
ocaml 2.ml 2795ms 29ms 4.9MB 2783ms 0ms ocaml 5.2.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 175ms 16ms 48.3MB 470ms 17ms openjdk 21
java 1-m.java 187ms 15ms 50.4MB 493ms 17ms openjdk 23
java 1-m.java 195ms 15ms 99.7MB 530ms 43ms graal/jvm 17.0.8
ocaml 2.ml 234ms 2.1ms 4.9MB 223ms 0ms ocaml 5.2.1
java 1-m.java 282ms 16ms 47.5MB 453ms 127ms openjdk/zgc 21

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 6.ml 329ms 3.1ms 24.9MB 313ms 0ms ocaml 5.2.1
java 4.java 415ms 6.6ms 107.3MB 563ms 50ms graal/jvm 17.0.8
java 4.java 431ms 15ms 47.5MB 517ms 20ms openjdk 21
java 4.java 439ms 9.7ms 49.3MB 523ms 17ms openjdk 23
java 4.java 541ms 2.5ms 44.9MB 507ms 133ms openjdk/zgc 21

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 6.ml 37ms 0.4ms 7.4MB 27ms 0ms ocaml 5.2.1
java 4.java 116ms 0.7ms 46.4MB 150ms 17ms openjdk 21
java 4.java 117ms 0.9ms 47.5MB 153ms 17ms openjdk 23
java 4-m.java 132ms 7.0ms 97.4MB 180ms 37ms graal/jvm 17.0.8
java 4.java 226ms 9.1ms 43.9MB 153ms 130ms openjdk/zgc 21

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 1.7ms 0.2ms 4.9MB 0ms 0ms ocaml 5.2.1
java 1.java 61ms 1.3ms 58.6MB 60ms 20ms graal/jvm 17.0.8
java 1.java 69ms 2.9ms 44.7MB 66ms 14ms openjdk 23
java 1.java 69ms 1.0ms 43.8MB 72ms 10ms openjdk 21
java 1.java 174ms 5.3ms 44.5MB 80ms 116ms openjdk/zgc 21

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 165ms 2.2ms 6.4MB 157ms 0ms ocaml 5.2.1

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 496ms 9.3ms 6.6MB 483ms 0ms ocaml 5.2.1

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 73ms 2.1ms 5.9MB 60ms 0ms ocaml 5.2.1

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 377ms 8.2ms 679.9MB 450ms 77ms openjdk 21
java 1.java 383ms 9.9ms 546.0MB 480ms 80ms openjdk 23
java 1-m.java 408ms 27ms 589.2MB 630ms 77ms graal/jvm 17.0.8
java 1.java 1004ms 16ms 1000.0MB 447ms 697ms openjdk/zgc 21
ocaml 1.ml 1039ms 0.6ms 70.2MB 997ms 27ms ocaml 5.2.1
ocaml 2.ml 1948ms 8.6ms 91.8MB 1900ms 30ms ocaml 5.2.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 143ms 1.0ms 21.7MB 130ms 3ms ocaml 5.2.1
java 1-m.java 153ms 0.5ms 206.4MB 210ms 50ms openjdk 21
java 1-m.java 154ms 0.8ms 158.8MB 213ms 47ms openjdk 23
java 1-m.java 210ms 8.6ms 260.7MB 360ms 47ms graal/jvm 17.0.8
ocaml 2.ml 342ms 3.9ms 27.7MB 317ms 7ms ocaml 5.2.1
java 1.java 386ms 10ms 343.0MB 210ms 247ms openjdk/zgc 21

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 351ms 2.4ms 5.2MB 340ms 0ms ocaml 5.2.1
java 1.java 417ms 2.4ms 45.2MB 450ms 13ms openjdk 21
java 1.java 420ms 6.1ms 48.2MB 450ms 20ms openjdk 23
java 1.java 429ms 7.0ms 85.0MB 457ms 27ms graal/jvm 17.0.8
java 1.java 530ms 6.4ms 46.5MB 450ms 130ms openjdk/zgc 21
java 2.java 1166ms 4.4ms 571.8MB 1293ms 77ms openjdk 21
java 2.java 1187ms 9.7ms 717.8MB 1287ms 90ms openjdk 23
java 2.java 3101ms 57ms 2431.6MB 1560ms 1743ms openjdk/zgc 21

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 40ms 1.6ms 5.2MB 30ms 0ms ocaml 5.2.1
java 1.java 111ms 2.5ms 45.2MB 137ms 20ms openjdk 21
java 1.java 112ms 0.7ms 87.3MB 130ms 30ms graal/jvm 17.0.8
java 1.java 114ms 1.2ms 48.5MB 140ms 20ms openjdk 23
java 1.java 230ms 5.1ms 46.5MB 150ms 133ms openjdk/zgc 21
java 2-m.java 289ms 6.3ms 348.4MB 407ms 70ms openjdk 23
java 2-m.java 293ms 18ms 355.0MB 440ms 30ms openjdk 21
java 2.java 658ms 2.3ms 536.9MB 437ms 403ms openjdk/zgc 21

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 367ms 5.0ms 118.1MB 397ms 27ms openjdk 23
java 1.java 367ms 3.8ms 114.6MB 413ms 27ms openjdk 21
java 1.java 535ms 4.6ms 114.6MB 440ms 157ms openjdk/zgc 21
java 1-m.java 654ms 9.2ms 208.3MB 983ms 70ms graal/jvm 17.0.8
java 2.java 734ms 5.2ms 57.1MB 777ms 23ms openjdk 21
java 2.java 750ms 10ms 60.4MB 790ms 20ms openjdk 23
java 2.java 804ms 11ms 53.3MB 740ms 130ms openjdk/zgc 21
ocaml 1.ml 887ms 4.5ms 550.8MB 827ms 43ms ocaml 5.2.1
java 2-m.java 1277ms 30ms 265.2MB 2290ms 83ms graal/jvm 17.0.8
ocaml 2.ml 1822ms 17ms 18.6MB 1810ms 0ms ocaml 5.2.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 140ms 4.3ms 68.2MB 177ms 17ms openjdk 23
java 1.java 151ms 8.4ms 65.3MB 200ms 17ms openjdk 21
ocaml 1.ml 171ms 3.0ms 142.3MB 147ms 10ms ocaml 5.2.1
java 1-m.java 210ms 26ms 127.6MB 297ms 50ms graal/jvm 17.0.8
java 2.java 244ms 4.8ms 50.3MB 297ms 20ms openjdk 21
java 2.java 249ms 5.7ms 50.9MB 290ms 20ms openjdk 23
java 1.java 264ms 1.7ms 63.3MB 193ms 133ms openjdk/zgc 21
java 2.java 348ms 11ms 49.4MB 273ms 137ms openjdk/zgc 21
ocaml 2.ml 451ms 8.0ms 9.1MB 437ms 0ms ocaml 5.2.1
java 2-m.java 489ms 42ms 151.7MB 883ms 47ms graal/jvm 17.0.8

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 4814ms 25ms 484.9MB 4640ms 157ms ocaml 5.2.1
java 3.java timeout 0.0ms 501.9MB 5477ms 97ms graal/jvm 17.0.8
java 3.java timeout 0.0ms 328.2MB 5333ms 50ms openjdk 21
java 3.java timeout 0.0ms 350.8MB 5360ms 57ms openjdk 23
java 3.java timeout 0.0ms 488.6MB 4940ms 307ms openjdk/zgc 21

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 488ms 5.4ms 57.1MB 447ms 30ms ocaml 5.2.1
java 3-m.java 749ms 10ms 130.7MB 1110ms 37ms openjdk 21
java 3-m.java 765ms 72ms 178.4MB 1157ms 47ms graal/jvm 17.0.8
java 3-m.java 770ms 25ms 134.3MB 1160ms 43ms openjdk 23
java 3.java 902ms 21ms 136.0MB 1070ms 167ms 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 1867ms 20ms 47.6MB 7143ms 20ms openjdk 21
java 2-m.java 1877ms 26ms 49.0MB 7130ms 20ms openjdk 23
java 2-m.java 1981ms 11ms 45.4MB 7137ms 137ms openjdk/zgc 21
java 2-m.java 2318ms 11ms 100.9MB 8233ms 47ms graal/jvm 17.0.8
ocaml 2.ml 4270ms 34ms 6.3MB 4260ms 0ms ocaml 5.2.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 557ms 2.8ms 48.4MB 1953ms 27ms openjdk 23
java 2-m.java 558ms 2.6ms 47.5MB 1963ms 23ms openjdk 21
java 2-m.java 676ms 7.0ms 45.6MB 1957ms 140ms openjdk/zgc 21
java 2-m.java 688ms 5.7ms 98.9MB 2293ms 57ms graal/jvm 17.0.8
ocaml 2.ml 1068ms 1.5ms 5.9MB 1057ms 0ms ocaml 5.2.1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 229ms 5.7ms 48.4MB 670ms 23ms openjdk 23
java 2-m.java 238ms 14ms 47.6MB 693ms 20ms openjdk 21
ocaml 2.ml 269ms 1.8ms 5.2MB 257ms 0ms ocaml 5.2.1
java 2-m.java 281ms 23ms 101.8MB 823ms 40ms graal/jvm 17.0.8
java 2-m.java 346ms 3.4ms 47.1MB 667ms 133ms openjdk/zgc 21