C++ 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.)

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 1-im.cpp 679ms 11ms 1.0MB 1237ms 3ms g++ 12.1.0
cpp 1-im.cpp 688ms 11ms 3.6MB 1337ms 0ms clang++ 11.0.0
java 1-m.java 1563ms 9.1ms 41.0MB 2980ms 13ms openjdk 18.0.1
java 1-m.java 1576ms 24ms 39.8MB 2983ms 23ms openjdk 19
java 1-m.java 1578ms 121ms 117.1MB 2963ms 57ms graal/jvm 17.0.3
java 1-m.java 1585ms 2.4ms 41.1MB 2913ms 70ms openjdk/zgc 18.0.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 1-im.cpp 67ms 5.0ms 3.6MB 110ms 0ms clang++ 11.0.0
cpp 1-im.cpp 69ms 1.8ms 1.0MB 100ms 0ms g++ 12.1.0
java 1-m.java 256ms 6.0ms 38.6MB 410ms 13ms openjdk 18.0.1
java 1-m.java 259ms 6.7ms 39.6MB 410ms 13ms openjdk 19
java 1-m.java 309ms 5.8ms 41.0MB 400ms 67ms openjdk/zgc 18.0.1
java 1.java 615ms 5.2ms 94.3MB 477ms 40ms graal/jvm 17.0.3

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 1.cpp 1.8ms 0.7ms 1.0MB 0ms 0ms g++ 12.1.0
cpp 1.cpp 2.8ms 0.8ms 1.0MB 0ms 0ms clang++ 11.0.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

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 0-i.cpp 167ms 0.4ms 0.9MB 160ms 0ms g++ 12.1.0
cpp 0-i.cpp 212ms 0.4ms 1.1MB 200ms 0ms clang++ 11.0.0
cpp 1.cpp 307ms 5.8ms 0.9MB 293ms 0ms g++ 12.1.0
cpp 1.cpp 392ms 6.8ms 1.1MB 383ms 0ms clang++ 11.0.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
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
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
cpp 0-i.cpp 21ms 1.0ms 0.9MB 10ms 0ms g++ 12.1.0
cpp 0-i.cpp 24ms 1.9ms 1.1MB 13ms 0ms clang++ 11.0.0
cpp 1.cpp 33ms 0.1ms 0.9MB 20ms 0ms g++ 12.1.0
cpp 1.cpp 42ms 0.3ms 1.1MB 30ms 0ms clang++ 11.0.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
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
cpp 1.cpp 369ms 18ms 7.4MB 357ms 0ms clang++ 11.0.0
cpp 1.cpp 578ms 2.4ms 7.7MB 567ms 0ms g++ 12.1.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
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
cpp 1.cpp 78ms 5.3ms 3.7MB 67ms 0ms clang++ 11.0.0
cpp 1.cpp 138ms 9.6ms 4.0MB 130ms 0ms g++ 12.1.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
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

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
cpp 7-m.cpp 885ms 14ms 3.2MB 1717ms 0ms clang++ 11.0.0
cpp 8-m.cpp 885ms 14ms 3.2MB 1723ms 0ms clang++ 11.0.0
cpp 7-m.cpp 886ms 13ms 1.0MB 1707ms 0ms g++ 12.1.0
cpp 8-m.cpp 905ms 2.6ms 0.9MB 1763ms 0ms g++ 12.1.0
cpp 6-im.cpp 1804ms 22ms 3.2MB 3530ms 10ms clang++ 11.0.0
cpp 6-im.cpp 1808ms 11ms 0.9MB 3423ms 7ms g++ 12.1.0
java 2-m.java 4400ms 28ms 115.2MB 8420ms 57ms graal/jvm 17.0.3
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
cpp 7-m.cpp 226ms 6.2ms 3.2MB 413ms 0ms clang++ 11.0.0
cpp 7-m.cpp 230ms 6.3ms 1.0MB 420ms 0ms g++ 12.1.0
cpp 8-m.cpp 232ms 6.2ms 3.1MB 433ms 0ms clang++ 11.0.0
cpp 8-m.cpp 236ms 1.3ms 1.0MB 440ms 0ms g++ 12.1.0
cpp 6-im.cpp 462ms 2.2ms 1.0MB 877ms 0ms g++ 12.1.0
cpp 6-im.cpp 470ms 2.8ms 3.2MB 897ms 0ms clang++ 11.0.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
cpp 7-m.cpp 63ms 1.6ms 3.1MB 103ms 0ms clang++ 11.0.0
cpp 7-m.cpp 63ms 1.3ms 0.9MB 103ms 0ms g++ 12.1.0
cpp 8-m.cpp 65ms 1.8ms 3.2MB 110ms 0ms clang++ 11.0.0
cpp 8-m.cpp 67ms 1.8ms 1.0MB 110ms 0ms g++ 12.1.0
cpp 6-im.cpp 123ms 2.8ms 0.9MB 220ms 0ms g++ 12.1.0
cpp 6-im.cpp 127ms 3.0ms 3.1MB 223ms 0ms clang++ 11.0.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