OCaml VS Java benchmarks

Current benchmark data was generated on Thu Feb 01 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 450ms 3.2ms 574.3MB 543ms 87ms openjdk 21
java 2-m.java 462ms 4.6ms 646.8MB 650ms 110ms graal/jvm 17.0.8
java 2.java 462ms 4.8ms 588.2MB 563ms 97ms openjdk 23
java 2.java 1178ms 0.9ms 1055.6MB 607ms 733ms openjdk/zgc 21
ocaml 1.ml 3017ms 20ms 150.6MB 2940ms 63ms ocaml 5.1.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2.java 123ms 1.1ms 166.9MB 147ms 37ms openjdk 21
java 2-m.java 125ms 1.5ms 163.2MB 157ms 33ms openjdk 23
java 2-m.java 168ms 15ms 230.2MB 220ms 70ms graal/jvm 17.0.8
ocaml 1.ml 222ms 2.9ms 18.8MB 203ms 3ms ocaml 5.1.1
java 2.java 314ms 1.3ms 241.4MB 153ms 213ms 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 888ms 5.5ms 97.2MB 3257ms 43ms graal/jvm 17.0.8
java 1-m.java 946ms 34ms 48.5MB 3513ms 23ms openjdk 21
java 1-m.java 989ms 11ms 49.0MB 3650ms 17ms openjdk 23
java 1-m.java 1010ms 36ms 47.9MB 3313ms 133ms openjdk/zgc 21
ocaml 2.ml 2911ms 3.0ms 3.0MB 2897ms 0ms ocaml 5.1.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 179ms 6.4ms 48.5MB 490ms 27ms openjdk 21
java 1-m.java 185ms 1.9ms 48.7MB 487ms 13ms openjdk 23
java 1-m.java 198ms 9.6ms 97.6MB 523ms 47ms graal/jvm 17.0.8
ocaml 2.ml 245ms 2.5ms 3.0MB 233ms 0ms ocaml 5.1.1
java 1-m.java 290ms 2.9ms 45.8MB 473ms 133ms 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 22.7MB 330ms 3ms ocaml 5.1.1
java 4.java 440ms 1.7ms 107.1MB 620ms 27ms graal/jvm 17.0.8
java 4.java 450ms 5.5ms 47.4MB 530ms 17ms openjdk 21
java 4.java 455ms 1.9ms 47.5MB 543ms 17ms openjdk 23
java 4.java 565ms 1.6ms 45.1MB 533ms 133ms openjdk/zgc 21

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 6.ml 39ms 0.7ms 5.4MB 27ms 0ms ocaml 5.1.1
java 4.java 119ms 4.0ms 46.5MB 167ms 7ms openjdk 23
java 4.java 124ms 1.1ms 46.2MB 157ms 23ms openjdk 21
java 4-m.java 144ms 8.0ms 99.7MB 213ms 30ms graal/jvm 17.0.8
java 4.java 242ms 5.6ms 43.9MB 167ms 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.7ms 0.1ms 3.0MB 0ms 0ms ocaml 5.1.1
java 1.java 66ms 3.1ms 54.7MB 64ms 24ms graal/jvm 17.0.8
java 1.java 73ms 1.9ms 43.8MB 74ms 14ms openjdk 21
java 1.java 73ms 2.7ms 43.9MB 80ms 14ms openjdk 23
java 1.java 189ms 6.4ms 42.6MB 84ms 132ms openjdk/zgc 21

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 186ms 5.8ms 6.5MB 177ms 0ms ocaml 5.1.1

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 540ms 18ms 6.4MB 527ms 0ms ocaml 5.1.1

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 79ms 1.6ms 6.0MB 70ms 0ms ocaml 5.1.1

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 399ms 1.6ms 680.1MB 480ms 80ms openjdk 21
java 1.java 400ms 2.6ms 658.4MB 477ms 80ms openjdk 23
java 1-m.java 411ms 5.6ms 638.2MB 593ms 120ms graal/jvm 17.0.8
java 1.java 1027ms 7.4ms 941.0MB 473ms 707ms openjdk/zgc 21
ocaml 1.ml 1178ms 8.6ms 74.8MB 1140ms 23ms ocaml 5.1.1
ocaml 2.ml 2124ms 11ms 85.5MB 2077ms 27ms ocaml 5.1.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 153ms 1.9ms 23.1MB 133ms 0ms ocaml 5.1.1
java 1-m.java 160ms 2.0ms 198.3MB 237ms 33ms openjdk 23
java 1-m.java 164ms 2.2ms 206.7MB 243ms 37ms openjdk 21
java 1-m.java 251ms 4.7ms 257.4MB 403ms 73ms graal/jvm 17.0.8
ocaml 2.ml 371ms 4.0ms 24.9MB 347ms 7ms ocaml 5.1.1
java 1.java 430ms 21ms 343.8MB 227ms 277ms openjdk/zgc 21

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 373ms 3.1ms 3.3MB 360ms 0ms ocaml 5.1.1
java 1.java 443ms 1.2ms 47.6MB 487ms 13ms openjdk 23
java 1.java 444ms 1.9ms 45.4MB 477ms 20ms openjdk 21
java 1.java 455ms 6.6ms 86.8MB 483ms 30ms graal/jvm 17.0.8
java 1.java 559ms 4.6ms 46.7MB 480ms 133ms openjdk/zgc 21
java 2.java 1234ms 5.9ms 597.7MB 1363ms 77ms openjdk 23
java 2.java 1238ms 9.8ms 647.8MB 1373ms 80ms openjdk 21
java 2.java 3177ms 56ms 2367.4MB 1670ms 1723ms openjdk/zgc 21

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 40ms 0.9ms 3.3MB 30ms 0ms ocaml 5.1.1
java 1.java 119ms 1.1ms 45.5MB 147ms 23ms openjdk 21
java 1.java 120ms 0.2ms 47.8MB 153ms 20ms openjdk 23
java 1.java 126ms 5.3ms 87.5MB 157ms 27ms graal/jvm 17.0.8
java 1.java 243ms 2.9ms 46.7MB 163ms 140ms openjdk/zgc 21
java 2-m.java 295ms 2.6ms 352.8MB 433ms 50ms openjdk 23
java 2-m.java 298ms 4.2ms 362.9MB 443ms 50ms openjdk 21
java 2.java 681ms 8.7ms 528.1MB 440ms 427ms openjdk/zgc 21

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 397ms 1.3ms 117.2MB 443ms 20ms openjdk 23
java 1.java 403ms 8.1ms 114.9MB 447ms 30ms openjdk 21
java 1.java 581ms 2.7ms 114.6MB 473ms 177ms openjdk/zgc 21
java 1-m.java 638ms 11ms 234.0MB 917ms 77ms graal/jvm 17.0.8
java 2.java 779ms 1.6ms 59.3MB 827ms 23ms openjdk 23
java 2.java 781ms 0.5ms 57.3MB 837ms 23ms openjdk 21
java 2.java 849ms 14ms 52.9MB 773ms 150ms openjdk/zgc 21
ocaml 1.ml 989ms 6.1ms 550.4MB 923ms 50ms ocaml 5.1.1
java 2-m.java 1353ms 17ms 264.4MB 2427ms 100ms graal/jvm 17.0.8
ocaml 2.ml 2043ms 6.1ms 18.5MB 2030ms 0ms ocaml 5.1.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 158ms 3.3ms 67.3MB 207ms 20ms openjdk 23
java 1.java 162ms 8.7ms 64.7MB 203ms 27ms openjdk 21
ocaml 1.ml 212ms 19ms 139.7MB 190ms 7ms ocaml 5.1.1
java 1-m.java 214ms 20ms 137.5MB 287ms 60ms graal/jvm 17.0.8
java 2.java 257ms 0.4ms 49.6MB 293ms 30ms openjdk 23
java 2.java 257ms 3.8ms 49.8MB 313ms 23ms openjdk 21
java 1.java 284ms 4.8ms 63.3MB 210ms 143ms openjdk/zgc 21
java 2.java 365ms 2.0ms 49.3MB 307ms 137ms openjdk/zgc 21
ocaml 2.ml 502ms 3.3ms 9.0MB 487ms 0ms ocaml 5.1.1
java 2-m.java 582ms 94ms 203.7MB 1050ms 63ms 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.4MB 5437ms 90ms graal/jvm 17.0.8
java 3.java timeout 0.0ms 303.5MB 5317ms 57ms openjdk 21
java 3.java timeout 0.0ms 303.4MB 5307ms 70ms openjdk 23
java 3.java timeout 0.0ms 469.6MB 4963ms 307ms openjdk/zgc 21
ocaml 2.ml timeout 0.0ms 466.4MB 4807ms 173ms ocaml 5.1.1

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 554ms 9.9ms 57.1MB 520ms 17ms ocaml 5.1.1
java 3-m.java 783ms 12ms 181.0MB 1160ms 67ms graal/jvm 17.0.8
java 3-m.java 809ms 17ms 130.9MB 1203ms 37ms openjdk 21
java 3-m.java 810ms 3.6ms 130.8MB 1213ms 43ms openjdk 23
java 3.java 967ms 17ms 133.5MB 1183ms 177ms 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 1956ms 9.0ms 48.0MB 7453ms 37ms openjdk 23
java 2-m.java 1957ms 12ms 47.8MB 7463ms 27ms openjdk 21
java 2-m.java 2081ms 13ms 45.6MB 7440ms 140ms openjdk/zgc 21
java 2-m.java 2462ms 20ms 94.8MB 8777ms 47ms graal/jvm 17.0.8
ocaml 2.ml 4552ms 0.3ms 4.4MB 4537ms 0ms ocaml 5.1.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 583ms 3.4ms 47.7MB 2050ms 20ms openjdk 21
java 2-m.java 586ms 3.4ms 47.9MB 2070ms 20ms openjdk 23
java 2-m.java 713ms 3.2ms 45.6MB 2100ms 133ms openjdk/zgc 21
java 2-m.java 744ms 11ms 100.2MB 2513ms 37ms graal/jvm 17.0.8
ocaml 2.ml 1148ms 4.4ms 4.0MB 1137ms 0ms ocaml 5.1.1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 233ms 0.9ms 47.6MB 667ms 20ms openjdk 21
java 2-m.java 243ms 5.5ms 47.9MB 727ms 23ms openjdk 23
java 2-m.java 277ms 8.5ms 98.5MB 783ms 43ms graal/jvm 17.0.8
ocaml 2.ml 296ms 9.9ms 3.4MB 287ms 0ms ocaml 5.1.1
java 2-m.java 372ms 13ms 45.5MB 740ms 133ms openjdk/zgc 21