Codon VS Java benchmarks

Current benchmark data was generated on Sun Jul 13 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.)

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
codon 1-m.py 11ms 1.0ms 8.6MB 22ms 0ms codon 0.19.0
java 1.java 62ms 2.2ms 52.9MB 66ms 18ms graal/jvm 17.0.8
java 1.java 67ms 7.0ms 43.8MB 74ms 18ms openjdk 21
java 1.java 71ms 5.3ms 44.7MB 74ms 16ms openjdk 23
java 1.java 193ms 7.2ms 42.8MB 82ms 136ms openjdk/zgc 21

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 442ms 1.0ms 45.1MB 480ms 17ms openjdk 21
java 1.java 444ms 3.9ms 48.3MB 480ms 23ms openjdk 23
java 1.java 454ms 0.5ms 81.1MB 490ms 30ms graal/jvm 17.0.8
java 1.java 563ms 6.0ms 44.7MB 483ms 133ms openjdk/zgc 21
java 2.java 1235ms 3.8ms 571.4MB 1363ms 87ms openjdk 21
java 2.java 1310ms 91ms 794.4MB 1433ms 93ms openjdk 23
codon 1.py 1318ms 1.0ms 9.4MB 1627ms 0ms codon 0.19.0
java 2.java 3270ms 60ms 2461.0MB 1670ms 1817ms openjdk/zgc 21

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 116ms 4.0ms 45.4MB 143ms 23ms openjdk 21
java 1.java 119ms 2.3ms 81.5MB 150ms 27ms graal/jvm 17.0.8
java 1.java 120ms 2.0ms 47.9MB 157ms 13ms openjdk 23
codon 1-m.py 176ms 3.2ms 9.4MB 487ms 0ms codon 0.19.0
java 1.java 240ms 5.7ms 44.7MB 153ms 140ms openjdk/zgc 21
java 2-m.java 294ms 9.4ms 366.4MB 437ms 50ms openjdk 21
java 2-m.java 317ms 4.3ms 397.4MB 450ms 67ms openjdk 23
java 2.java 674ms 5.7ms 533.2MB 460ms 400ms openjdk/zgc 21

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 390ms 0.8ms 118.4MB 430ms 23ms openjdk 23
java 1.java 391ms 5.0ms 115.1MB 447ms 23ms openjdk 21
codon 1-m.py 410ms 9.1ms 48.4MB 713ms 3ms codon 0.19.0
java 1.java 561ms 6.7ms 112.6MB 463ms 160ms openjdk/zgc 21
java 1-m.java 626ms 57ms 271.3MB 907ms 73ms graal/jvm 17.0.8
java 2.java 779ms 2.8ms 57.2MB 837ms 23ms openjdk 21
java 2.java 783ms 1.4ms 60.2MB 830ms 20ms openjdk 23
java 2.java 853ms 0.8ms 53.3MB 780ms 147ms openjdk/zgc 21
codon 2.py 903ms 4.6ms 100.8MB 1207ms 20ms codon 0.19.0
java 2-m.java 1413ms 80ms 290.5MB 2513ms 117ms graal/jvm 17.0.8

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
codon 1-m.py 118ms 3.1ms 18.9MB 423ms 0ms codon 0.19.0
java 1.java 152ms 2.2ms 64.8MB 200ms 20ms openjdk 21
java 1.java 154ms 3.8ms 68.1MB 203ms 20ms openjdk 23
java 1-m.java 212ms 3.8ms 133.8MB 293ms 47ms graal/jvm 17.0.8
codon 2-m.py 236ms 3.0ms 27.6MB 540ms 3ms codon 0.19.0
java 2.java 262ms 8.9ms 50.3MB 310ms 20ms openjdk 23
java 2.java 263ms 4.7ms 49.3MB 330ms 20ms openjdk 21
java 1.java 278ms 4.5ms 61.5MB 197ms 143ms openjdk/zgc 21
java 2.java 368ms 3.9ms 47.5MB 307ms 143ms openjdk/zgc 21
java 2-m.java 483ms 1.9ms 140.6MB 857ms 63ms graal/jvm 17.0.8