Perl VS Java benchmarks

Current benchmark data was generated on Tue Apr 01 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 463ms 0.8ms 576.3MB 547ms 97ms openjdk 21
java 2-m.java 465ms 3.0ms 643.3MB 647ms 120ms graal/jvm 17.0.8
java 2.java 474ms 2.2ms 624.4MB 590ms 93ms openjdk 23
java 2.java 1249ms 22ms 1096.2MB 580ms 837ms openjdk/zgc 21
perl 1.pl timeout 0.0ms 77.8MB 4957ms 30ms perl 5.40.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2.java 126ms 3.1ms 167.2MB 157ms 30ms openjdk 21
java 2-m.java 128ms 4.5ms 98.8MB 163ms 30ms openjdk 23
java 2-m.java 149ms 6.5ms 224.4MB 223ms 57ms graal/jvm 17.0.8
java 2.java 313ms 5.1ms 241.8MB 160ms 210ms openjdk/zgc 21
perl 1.pl 1821ms 7.9ms 14.4MB 1807ms 0ms perl 5.40.1

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 4-m.java 447ms 11ms 101.5MB 637ms 40ms graal/jvm 17.0.8
java 4.java 460ms 1.3ms 49.2MB 550ms 20ms openjdk 23
java 4.java 461ms 3.8ms 47.6MB 547ms 20ms openjdk 21
java 4.java 578ms 7.4ms 45.3MB 540ms 147ms openjdk/zgc 21
perl 1.pl 3620ms 21ms 10.9MB 3607ms 0ms perl 5.40.1

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 4-m.java 128ms 4.4ms 93.9MB 177ms 40ms graal/jvm 17.0.8
java 4.java 128ms 3.4ms 46.2MB 167ms 20ms openjdk 21
java 4.java 129ms 1.5ms 48.3MB 170ms 20ms openjdk 23
java 4.java 249ms 1.9ms 43.7MB 170ms 140ms openjdk/zgc 21
perl 1.pl 371ms 2.6ms 6.6MB 360ms 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.7ms 0.2ms 5.3MB 0ms 0ms perl 5.40.1
java 1.java 64ms 1.4ms 52.8MB 66ms 20ms graal/jvm 17.0.8
java 1.java 68ms 2.2ms 43.7MB 78ms 18ms openjdk 21
java 1.java 73ms 6.0ms 44.7MB 76ms 18ms openjdk 23
java 1.java 195ms 5.0ms 43.0MB 86ms 138ms openjdk/zgc 21

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 448ms 1.9ms 45.3MB 487ms 20ms openjdk 21
java 1.java 448ms 1.6ms 48.3MB 480ms 20ms openjdk 23
java 1.java 449ms 6.6ms 81.5MB 477ms 30ms graal/jvm 17.0.8
java 1.java 566ms 4.0ms 44.5MB 483ms 137ms openjdk/zgc 21
java 2.java 1270ms 4.1ms 792.6MB 1393ms 103ms openjdk 23
java 2.java 1288ms 52ms 595.9MB 1420ms 83ms openjdk 21
java 2.java 3257ms 134ms 2431.0MB 1623ms 1843ms openjdk/zgc 21
perl 2.pl timeout 0.0ms 6.1MB 4990ms 0ms perl 5.40.1

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 119ms 1.7ms 81.7MB 147ms 33ms graal/jvm 17.0.8
java 1.java 121ms 1.4ms 45.2MB 160ms 20ms openjdk 21
java 1.java 124ms 7.2ms 48.2MB 160ms 20ms openjdk 23
java 1.java 248ms 4.1ms 44.9MB 170ms 140ms openjdk/zgc 21
java 2-m.java 301ms 9.8ms 387.1MB 443ms 53ms openjdk 21
java 2-m.java 314ms 3.1ms 416.0MB 453ms 70ms openjdk 23
java 2.java 692ms 5.9ms 525.1MB 467ms 410ms openjdk/zgc 21
perl 2.pl 2724ms 26ms 6.1MB 2713ms 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 1997ms 10ms 47.8MB 7620ms 23ms openjdk 21
java 2-m.java 2004ms 6.8ms 48.5MB 7647ms 23ms openjdk 23
java 2-m.java 2106ms 19ms 45.5MB 7530ms 147ms openjdk/zgc 21
java 2-m.java 2510ms 37ms 95.1MB 9387ms 50ms graal/jvm 17.0.8
perl 4.pl timeout 0.0ms 9.9MB 19727ms 10ms perl 5.40.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 608ms 11ms 49.1MB 2147ms 23ms openjdk 23
java 2-m.java 610ms 7.9ms 47.8MB 2153ms 23ms openjdk 21
java 2-m.java 729ms 4.6ms 45.4MB 2143ms 150ms openjdk/zgc 21
java 2-m.java 762ms 11ms 93.2MB 2673ms 43ms graal/jvm 17.0.8
perl 4.pl timeout 0.0ms 10.1MB 19560ms 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 253ms 8.5ms 48.1MB 743ms 23ms openjdk 21
java 2-m.java 267ms 10ms 48.9MB 800ms 27ms openjdk 23
java 2-m.java 298ms 25ms 94.0MB 890ms 37ms graal/jvm 17.0.8
java 2-m.java 383ms 1.6ms 45.6MB 763ms 147ms openjdk/zgc 21
perl 4-m.pl 3427ms 15ms 9.4MB 13227ms 3ms perl 5.40.1