D VS Java benchmarks

Current benchmark data was generated on Wed May 25 2022, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8272CL 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 763ms 6.3ms 409.6MB 760ms 123ms openjdk 19
java 2.java 804ms 74ms 601.4MB 767ms 147ms openjdk 18.0.1
java 2.java 1100ms 12ms 681.2MB 903ms 160ms graal/jvm 17.0.3
java 2.java 1391ms 53ms 1047.4MB 987ms 620ms openjdk/zgc 18.0.1
d 1.d 3653ms 27ms 75.1MB 3940ms 20ms ldc2 1.29.0
d 1.d timeout 0.0ms 0.0MB 0ms 0ms dmd 2.100.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2.java 167ms 8.8ms 106.6MB 153ms 40ms openjdk 18.0.1
java 2.java 178ms 3.6ms 107.5MB 177ms 33ms openjdk 19
d 1.d 300ms 2.5ms 15.1MB 290ms 0ms ldc2 1.29.0
java 2.java 328ms 2.3ms 235.7MB 187ms 167ms openjdk/zgc 18.0.1
d 1.d 469ms 8.4ms 16.3MB 457ms 3ms dmd 2.100.0
java 2.java 518ms 12ms 169.0MB 247ms 50ms graal/jvm 17.0.3

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 1.d timeout 0.0ms 0.0MB 0ms 0ms dmd 2.100.0
d 1.d timeout 0.0ms 0.0MB 0ms 0ms ldc2 1.29.0
java 1.java timeout 0.0ms 0.0MB 0ms 0ms loom 19

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 772ms 131ms 108.2MB 1330ms 67ms loom 19
d 1.d 1260ms 1.3ms 8.3MB 1247ms 0ms ldc2 1.29.0
d 1.d 1685ms 3.6ms 11.0MB 1667ms 7ms dmd 2.100.0

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 733ms 22ms 216.6MB 1247ms 73ms openjdk 18.0.1
java 1-m.java 896ms 104ms 201.0MB 1567ms 90ms openjdk 19
java 1-m.java 1053ms 62ms 470.2MB 1490ms 343ms openjdk/zgc 18.0.1
java 1.java 1103ms 21ms 287.6MB 1343ms 123ms graal/jvm 17.0.3
d 1.d timeout 0.0ms 0.0MB 0ms 0ms dmd 2.100.0
d 1.d timeout 0.0ms 0.0MB 0ms 0ms ldc2 1.29.0

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 399ms 27ms 110.3MB 660ms 27ms openjdk 18.0.1
java 1-m.java 437ms 8.2ms 115.3MB 727ms 30ms openjdk 19
java 1-m.java 525ms 9.3ms 212.9MB 710ms 180ms openjdk/zgc 18.0.1
java 1.java 726ms 13ms 187.2MB 630ms 87ms graal/jvm 17.0.3
d 1.d 894ms 50ms 6.8MB 883ms 0ms ldc2 1.29.0
d 1.d 1088ms 0.6ms 8.0MB 1073ms 0ms dmd 2.100.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 1.d 2.7ms 0.6ms 4.0MB 0ms 0ms dmd 2.100.0
d 1.d 3.3ms 1.9ms 3.0MB 0ms 0ms ldc2 1.29.0
java 1.java 79ms 1.8ms 61.3MB 73ms 18ms graal/jvm 17.0.3
java 1.java 81ms 2.9ms 38.9MB 82ms 10ms openjdk 18.0.1
java 1.java 85ms 4.6ms 38.3MB 78ms 14ms openjdk 19
java 1.java 131ms 1.4ms 38.7MB 86ms 58ms openjdk/zgc 18.0.1

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 1.d 180ms 2.8ms 4.0MB 170ms 0ms ldc2 1.29.0
d 1.d 255ms 0.3ms 4.9MB 240ms 0ms dmd 2.100.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 1.d 527ms 4.1ms 4.1MB 520ms 0ms ldc2 1.29.0
d 1.d 744ms 1.9ms 4.8MB 737ms 0ms dmd 2.100.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 1.d 76ms 1.8ms 3.8MB 60ms 0ms ldc2 1.29.0
d 1.d 111ms 0.9ms 5.2MB 100ms 0ms dmd 2.100.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 573ms 6.4ms 366.3MB 573ms 103ms openjdk 18.0.1
java 1.java 575ms 12ms 364.4MB 590ms 83ms openjdk 19
java 1.java 972ms 22ms 447.4MB 777ms 140ms graal/jvm 17.0.3
java 1.java 1041ms 9.3ms 778.4MB 703ms 493ms openjdk/zgc 18.0.1
d 1.d 1813ms 8.3ms 74.9MB 1880ms 23ms ldc2 1.29.0
d 1.d 2891ms 117ms 153.4MB 3213ms 47ms dmd 2.100.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 240ms 4.4ms 171.2MB 230ms 63ms openjdk 19
java 1.java 243ms 2.4ms 220.9MB 237ms 53ms openjdk 18.0.1
d 1.d 352ms 1.3ms 39.0MB 327ms 13ms ldc2 1.29.0
java 1.java 459ms 21ms 334.9MB 273ms 227ms openjdk/zgc 18.0.1
d 1.d 577ms 23ms 39.9MB 630ms 3ms dmd 2.100.0
java 1.java 624ms 24ms 246.2MB 413ms 77ms graal/jvm 17.0.3

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 1.d 463ms 9.0ms 1.2MB 450ms 0ms ldc2 1.29.0
d 2.d 487ms 1.8ms 1.2MB 473ms 0ms ldc2 1.29.0
java 1.java 626ms 14ms 40.9MB 643ms 13ms openjdk 18.0.1
java 1.java 628ms 13ms 39.7MB 637ms 17ms openjdk 19
java 1.java 696ms 1.2ms 38.4MB 663ms 53ms openjdk/zgc 18.0.1
java 1.java 891ms 1.3ms 88.1MB 610ms 33ms graal/jvm 17.0.3
d 1.d 1093ms 2.5ms 1.9MB 1080ms 0ms dmd 2.100.0
java 2.java 2253ms 3.5ms 526.9MB 2250ms 147ms openjdk 18.0.1
java 2.java 2272ms 9.4ms 508.4MB 2277ms 157ms openjdk 19
d 2.d 2903ms 0.8ms 2.0MB 2890ms 0ms dmd 2.100.0
java 2.java 3326ms 73ms 1646.8MB 2433ms 1097ms openjdk/zgc 18.0.1

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 1.d 51ms 0.7ms 1.2MB 40ms 0ms ldc2 1.29.0
d 2.d 52ms 0.3ms 1.2MB 40ms 0ms ldc2 1.29.0
d 1.d 127ms 0.4ms 2.0MB 120ms 0ms dmd 2.100.0
java 1.java 147ms 1.2ms 39.8MB 163ms 13ms openjdk 19
java 1.java 152ms 7.3ms 40.4MB 157ms 23ms openjdk 18.0.1
java 1.java 205ms 6.2ms 39.8MB 160ms 70ms openjdk/zgc 18.0.1
d 2.d 260ms 0.6ms 1.9MB 250ms 0ms dmd 2.100.0
java 2.java 459ms 12ms 314.1MB 487ms 110ms openjdk 18.0.1
java 1.java 468ms 0.9ms 82.5MB 180ms 30ms graal/jvm 17.0.3
java 2.java 481ms 1.1ms 345.4MB 523ms 103ms openjdk 19
java 2.java 788ms 8.8ms 521.2MB 570ms 370ms openjdk/zgc 18.0.1

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 2.d 868ms 1.3ms 48.8MB 837ms 13ms ldc2 1.29.0
java 2.java 934ms 57ms 51.2MB 970ms 13ms openjdk 18.0.1
java 2.java 1037ms 49ms 50.1MB 1067ms 23ms openjdk 19
java 2.java 1090ms 3.0ms 47.3MB 1067ms 63ms openjdk/zgc 18.0.1
d 1.d 1293ms 6.4ms 44.0MB 1260ms 13ms ldc2 1.29.0
d 1.d 1304ms 41ms 75.1MB 1273ms 13ms dmd 2.100.0
d 2.d 1728ms 2.6ms 49.2MB 1700ms 13ms dmd 2.100.0
java 1.java 1767ms 54ms 82.7MB 1787ms 20ms openjdk 18.0.1
java 1.java 1820ms 4.2ms 108.5MB 1753ms 103ms openjdk/zgc 18.0.1
java 1.java 1852ms 16ms 82.3MB 1873ms 30ms openjdk 19
java 1.java 2029ms 33ms 170.9MB 2880ms 70ms graal/jvm 17.0.3
java 2-m.java 2082ms 1.6ms 136.2MB 3847ms 73ms graal/jvm 17.0.3

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 1.d 124ms 3.7ms 14.2MB 113ms 0ms ldc2 1.29.0
d 1.d 145ms 1.6ms 23.6MB 127ms 3ms dmd 2.100.0
d 2.d 205ms 0.2ms 15.2MB 187ms 3ms ldc2 1.29.0
java 1.java 290ms 4.1ms 56.8MB 313ms 23ms openjdk 18.0.1
java 1.java 294ms 1.2ms 57.9MB 313ms 27ms openjdk 19
java 2.java 303ms 11ms 43.3MB 333ms 17ms openjdk 18.0.1
java 1.java 328ms 4.4ms 57.9MB 290ms 77ms openjdk/zgc 18.0.1
java 2.java 328ms 1.9ms 46.1MB 360ms 20ms openjdk 19
java 2.java 376ms 4.3ms 41.1MB 357ms 63ms openjdk/zgc 18.0.1
d 2.d 430ms 0.4ms 15.9MB 410ms 7ms dmd 2.100.0
java 1.java 671ms 6.7ms 140.4MB 477ms 63ms graal/jvm 17.0.3
java 2.java 961ms 41ms 129.4MB 1160ms 33ms graal/jvm 17.0.3

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 1.d 3485ms 3.3ms 7.8MB 3513ms 30ms ldc2 1.29.0
d 1.d timeout 0.0ms 0.0MB 0ms 0ms dmd 2.100.0
java 1.java timeout 0.0ms 0.0MB 0ms 0ms graal/jvm 17.0.3
java 1.java timeout 0.0ms 0.0MB 0ms 0ms openjdk 18.0.1
java 1.java timeout 0.0ms 0.0MB 0ms 0ms openjdk 19
java 1.java timeout 0.0ms 0.0MB 0ms 0ms openjdk/zgc 18.0.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 1.d 833ms 2.2ms 8.0MB 830ms 0ms ldc2 1.29.0
d 1.d 1380ms 91ms 8.8MB 1380ms 0ms dmd 2.100.0
java 1.java 1559ms 24ms 379.5MB 1990ms 140ms graal/jvm 17.0.3
java 1.java 1649ms 6.5ms 261.4MB 1943ms 73ms openjdk 18.0.1
java 1.java 1663ms 16ms 262.7MB 2003ms 97ms openjdk 19
java 1.java 2164ms 24ms 984.4MB 2187ms 707ms openjdk/zgc 18.0.1

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 1.d 3889ms 1.5ms 3.8MB 3877ms 0ms ldc2 1.29.0
java 2-m.java 4400ms 28ms 115.2MB 8420ms 57ms graal/jvm 17.0.3
d 1.d 4416ms 24ms 4.6MB 4400ms 0ms dmd 2.100.0
java 2.java timeout 0.0ms 0.0MB 0ms 0ms openjdk 18.0.1
java 2.java timeout 0.0ms 0.0MB 0ms 0ms openjdk 19
java 2.java timeout 0.0ms 0.0MB 0ms 0ms openjdk/zgc 18.0.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 1.d 977ms 1.0ms 3.6MB 963ms 0ms ldc2 1.29.0
d 1.d 1104ms 0.1ms 4.5MB 1093ms 0ms dmd 2.100.0
java 2-m.java 1262ms 17ms 114.8MB 2297ms 53ms graal/jvm 17.0.3
java 2-m.java 1651ms 80ms 42.6MB 3087ms 23ms openjdk 19
java 2-m.java 2110ms 38ms 40.7MB 3980ms 13ms openjdk 18.0.1
java 2-m.java 2212ms 31ms 40.7MB 4127ms 67ms openjdk/zgc 18.0.1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
d 1.d 248ms 1.6ms 3.2MB 233ms 0ms ldc2 1.29.0
d 1.d 281ms 1.1ms 3.9MB 270ms 0ms dmd 2.100.0
java 2-m.java 522ms 28ms 40.2MB 907ms 13ms openjdk 19
java 2-m.java 634ms 6.8ms 39.1MB 1107ms 13ms openjdk 18.0.1
java 2-m.java 710ms 20ms 38.6MB 1183ms 53ms openjdk/zgc 18.0.1
java 2.java 755ms 14ms 104.2MB 733ms 37ms graal/jvm 17.0.3