Perl VS Java benchmarks

Current benchmark data was generated on Wed Jan 22 2025, 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 467ms 1.5ms 646.0MB 567ms 97ms openjdk 23
java 2-m.java 468ms 12ms 645.0MB 687ms 90ms graal/jvm 17.0.8
java 2.java 498ms 2.1ms 572.9MB 563ms 113ms openjdk 21
java 2.java 1170ms 8.1ms 1044.5MB 570ms 760ms openjdk/zgc 21
perl 1.pl timeout 0.0ms 77.8MB 4960ms 27ms perl 5.40.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2.java 126ms 6.8ms 96.2MB 147ms 40ms openjdk 23
java 2.java 127ms 1.9ms 168.9MB 160ms 23ms openjdk 21
java 2-m.java 150ms 3.7ms 231.2MB 210ms 67ms graal/jvm 17.0.8
java 2.java 307ms 4.8ms 241.9MB 163ms 197ms openjdk/zgc 21
perl 1.pl 1798ms 12ms 14.4MB 1787ms 0ms perl 5.40.1

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 4.java 443ms 2.7ms 106.4MB 627ms 30ms graal/jvm 17.0.8
java 4.java 452ms 4.1ms 47.5MB 537ms 20ms openjdk 21
java 4.java 457ms 2.3ms 49.1MB 537ms 27ms openjdk 23
java 4.java 563ms 2.8ms 45.2MB 537ms 130ms openjdk/zgc 21
perl 1.pl 3604ms 17ms 10.9MB 3590ms 0ms perl 5.40.1

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 4.java 125ms 1.5ms 46.5MB 167ms 10ms openjdk 21
java 4-m.java 125ms 2.0ms 47.9MB 170ms 20ms openjdk 23
java 4-m.java 130ms 6.6ms 92.6MB 180ms 33ms graal/jvm 17.0.8
java 4.java 239ms 4.5ms 46.0MB 160ms 133ms openjdk/zgc 21
perl 1.pl 383ms 27ms 6.5MB 367ms 0ms perl 5.40.1

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
perl 1.pl 2.8ms 0.4ms 5.1MB 0ms 0ms perl 5.40.1
java 1.java 64ms 1.6ms 54.9MB 66ms 18ms graal/jvm 17.0.8
java 1.java 71ms 6.1ms 43.9MB 80ms 16ms openjdk 21
java 1.java 72ms 6.3ms 44.7MB 70ms 20ms openjdk 23
java 1.java 186ms 4.8ms 44.6MB 90ms 126ms openjdk/zgc 21

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 441ms 1.3ms 45.2MB 483ms 17ms openjdk 21
java 1.java 445ms 3.9ms 48.2MB 477ms 23ms openjdk 23
java 1.java 445ms 1.7ms 87.1MB 467ms 30ms graal/jvm 17.0.8
java 1.java 565ms 2.0ms 44.6MB 497ms 127ms openjdk/zgc 21
java 2.java 1252ms 33ms 588.1MB 1390ms 83ms openjdk 21
java 2.java 1255ms 8.3ms 753.6MB 1367ms 107ms openjdk 23
java 2.java 3285ms 56ms 2475.9MB 1647ms 1840ms openjdk/zgc 21
perl 2.pl timeout 0.0ms 6.1MB 4987ms 0ms perl 5.40.1

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 118ms 1.2ms 45.1MB 153ms 20ms openjdk 21
java 1.java 123ms 1.7ms 47.9MB 153ms 20ms openjdk 23
java 1.java 123ms 6.2ms 87.3MB 157ms 27ms graal/jvm 17.0.8
java 1.java 237ms 4.3ms 44.7MB 157ms 137ms openjdk/zgc 21
java 2-m.java 299ms 2.8ms 344.9MB 437ms 53ms openjdk 21
java 2-m.java 311ms 5.4ms 346.3MB 443ms 70ms openjdk 23
java 2.java 689ms 16ms 525.9MB 463ms 403ms openjdk/zgc 21
perl 2.pl 2757ms 41ms 6.1MB 2743ms 0ms perl 5.40.1

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 1963ms 2.5ms 47.3MB 7453ms 20ms openjdk 21
java 2-m.java 1965ms 7.5ms 48.6MB 7467ms 17ms openjdk 23
java 2-m.java 2080ms 2.7ms 45.3MB 7453ms 143ms openjdk/zgc 21
java 2-m.java 2480ms 17ms 98.9MB 8800ms 40ms graal/jvm 17.0.8
perl 4.pl timeout 0.0ms 13.8MB 19717ms 23ms perl 5.40.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 592ms 8.0ms 47.7MB 2083ms 13ms openjdk 21
java 2-m.java 592ms 6.7ms 48.8MB 2033ms 30ms openjdk 23
java 2-m.java 712ms 1.7ms 45.3MB 2087ms 133ms openjdk/zgc 21
java 2-m.java 739ms 6.2ms 98.0MB 2493ms 37ms graal/jvm 17.0.8
perl 4.pl timeout 0.0ms 14.0MB 19480ms 10ms perl 5.40.1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 246ms 3.6ms 48.5MB 717ms 20ms openjdk 23
java 2-m.java 247ms 13ms 47.4MB 710ms 23ms openjdk 21
java 2-m.java 285ms 13ms 96.7MB 827ms 40ms graal/jvm 17.0.8
java 2-m.java 355ms 6.7ms 47.3MB 680ms 137ms openjdk/zgc 21
perl 4-m.pl 3392ms 3.3ms 12.4MB 13083ms 10ms perl 5.40.1