Java VS Odin benchmarks

Current benchmark data was generated on Thu Jul 31 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 10ms 574.1MB 560ms 93ms openjdk 21
java 2.java 482ms 8.0ms 614.5MB 597ms 97ms openjdk 23
java 2-m.java 490ms 24ms 642.8MB 657ms 147ms graal/jvm 17.0.8
java 2.java 1164ms 12ms 1038.5MB 583ms 750ms openjdk/zgc 21
odin 1.odin 2368ms 14ms 49.5MB 2337ms 17ms odin 2024

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2.java 124ms 9.7ms 97.1MB 157ms 27ms openjdk 23
java 2.java 127ms 1.8ms 169.1MB 157ms 30ms openjdk 21
java 2-m.java 158ms 2.6ms 224.2MB 233ms 60ms graal/jvm 17.0.8
odin 1.odin 220ms 3.5ms 7.5MB 210ms 0ms odin 2024
java 2.java 310ms 4.2ms 241.5MB 163ms 203ms openjdk/zgc 21

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 581ms 12ms 279.9MB 1600ms 70ms openjdk 21
java 1-m.java 609ms 6.2ms 352.4MB 1180ms 103ms graal/jvm 17.0.8
java 1-m.java 612ms 54ms 236.7MB 1663ms 73ms openjdk 23
java 1-m.java 959ms 37ms 526.9MB 1643ms 403ms openjdk/zgc 21

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 320ms 35ms 226.8MB 627ms 70ms graal/jvm 17.0.8
java 1-m.java 352ms 43ms 195.6MB 950ms 57ms openjdk 21
java 1-m.java 367ms 18ms 125.4MB 1000ms 57ms openjdk 23
java 1-m.java 529ms 29ms 213.2MB 1033ms 217ms openjdk/zgc 21

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 898ms 14ms 95.6MB 3310ms 40ms graal/jvm 17.0.8
java 1-m.java 953ms 32ms 48.4MB 3513ms 27ms openjdk 21
java 1-m.java 984ms 12ms 50.2MB 3630ms 23ms openjdk 23
java 1-m.java 1030ms 8.5ms 45.8MB 3393ms 137ms openjdk/zgc 21

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 181ms 3.0ms 48.3MB 500ms 23ms openjdk 21
java 1-m.java 194ms 5.4ms 50.1MB 510ms 20ms openjdk 23
java 1-m.java 212ms 5.5ms 95.8MB 593ms 43ms graal/jvm 17.0.8
java 1-m.java 301ms 3.6ms 46.0MB 497ms 143ms openjdk/zgc 21

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 4-m.java 449ms 8.5ms 101.6MB 633ms 43ms graal/jvm 17.0.8
java 4.java 454ms 6.2ms 49.0MB 543ms 20ms openjdk 23
java 4.java 455ms 7.4ms 47.7MB 553ms 17ms openjdk 21
java 4.java 577ms 4.1ms 45.3MB 553ms 137ms openjdk/zgc 21

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 4-m.java 123ms 4.9ms 46.6MB 170ms 17ms openjdk 21
java 4.java 124ms 3.8ms 48.0MB 170ms 13ms openjdk 23
java 4-m.java 129ms 11ms 91.8MB 180ms 33ms graal/jvm 17.0.8
java 4.java 243ms 7.9ms 43.8MB 157ms 140ms openjdk/zgc 21

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 1.1ms 0.0ms 1.6MB 0ms 0ms odin 2024
java 1.java 64ms 2.2ms 52.9MB 70ms 20ms graal/jvm 17.0.8
java 1.java 70ms 6.0ms 44.7MB 76ms 16ms openjdk 23
java 1.java 73ms 2.0ms 43.8MB 74ms 20ms openjdk 21
java 1.java 188ms 4.1ms 43.2MB 82ms 136ms openjdk/zgc 21

knucleotide

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 3-m.java 1085ms 42ms 129.7MB 3697ms 47ms openjdk 21
java 3-m.java 1095ms 8.7ms 156.1MB 3740ms 57ms openjdk 23
java 3-m.java 1123ms 24ms 180.1MB 3847ms 63ms graal/jvm 17.0.8
java 3-m.java 1433ms 31ms 179.2MB 4513ms 217ms openjdk/zgc 21

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 3-m.java 321ms 27ms 95.4MB 930ms 33ms openjdk 21
java 3-m.java 328ms 7.5ms 86.0MB 953ms 40ms openjdk 23
java 3-m.java 330ms 1.4ms 135.9MB 900ms 57ms graal/jvm 17.0.8
java 3-m.java 442ms 5.8ms 100.1MB 933ms 167ms openjdk/zgc 21

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 289ms 2.9ms 4.6MB 280ms 0ms odin 2024
java 1b.java 1158ms 11ms 54.3MB 1267ms 20ms openjdk 21
java 1b.java 1158ms 12ms 55.6MB 1263ms 17ms openjdk 23
java 1b.java 1187ms 12ms 109.9MB 1383ms 47ms graal/jvm 17.0.8
java 1.java 1252ms 4.7ms 138.0MB 1357ms 50ms graal/jvm 17.0.8
java 1b.java 1284ms 7.5ms 51.2MB 1270ms 143ms openjdk/zgc 21
java 1a.java 1660ms 3.1ms 56.5MB 1763ms 17ms openjdk 23
java 1a.java 1666ms 14ms 55.2MB 1767ms 23ms openjdk 21
java 1a.java 1680ms 4.1ms 102.4MB 1793ms 40ms graal/jvm 17.0.8
java 1.java 1707ms 3.8ms 202.5MB 1787ms 33ms openjdk 21
java 1.java 1718ms 7.0ms 315.7MB 1770ms 60ms openjdk 23
java 1a.java 1781ms 5.0ms 51.4MB 1757ms 140ms openjdk/zgc 21
java 1.java 2361ms 7.8ms 857.1MB 1803ms 663ms openjdk/zgc 21
java 2.java timeout 0.0ms 670.6MB 5280ms 117ms openjdk 21
java 2.java timeout 0.0ms 886.9MB 5317ms 140ms openjdk 23
java 2.java timeout 0.0ms 3370.5MB 3433ms 1933ms openjdk/zgc 21

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 14ms 0.2ms 1.8MB 10ms 0ms odin 2024
java 1b-m.java 178ms 10ms 49.5MB 287ms 20ms openjdk 21
java 1b-m.java 186ms 4.6ms 51.5MB 300ms 20ms openjdk 23
java 1a-m.java 189ms 3.1ms 51.9MB 290ms 23ms openjdk 23
java 1-m.java 194ms 2.8ms 82.1MB 267ms 27ms openjdk 21
java 1-m.java 196ms 6.4ms 87.3MB 270ms 33ms openjdk 23
java 1-m.java 198ms 6.6ms 112.3MB 300ms 50ms graal/jvm 17.0.8
java 1a-m.java 200ms 5.3ms 50.7MB 310ms 23ms openjdk 21
java 1a-m.java 211ms 3.3ms 98.6MB 320ms 37ms graal/jvm 17.0.8
java 1b-m.java 246ms 16ms 102.2MB 423ms 47ms graal/jvm 17.0.8
java 1b.java 305ms 3.3ms 47.6MB 300ms 140ms openjdk/zgc 21
java 1a.java 314ms 0.7ms 48.1MB 297ms 143ms openjdk/zgc 21
java 1.java 333ms 11ms 114.3MB 267ms 160ms openjdk/zgc 21
java 2-m.java 566ms 9.2ms 659.0MB 843ms 93ms openjdk 21
java 2-m.java 574ms 7.2ms 833.9MB 840ms 113ms openjdk 23
java 2.java 1595ms 3.0ms 1358.2MB 857ms 1047ms openjdk/zgc 21

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 403ms 3.7ms 538.3MB 493ms 97ms openjdk 23
java 1.java 419ms 5.8ms 678.2MB 483ms 103ms openjdk 21
java 1-m.java 427ms 23ms 637.7MB 607ms 137ms graal/jvm 17.0.8
java 1.java 1043ms 30ms 962.6MB 467ms 717ms openjdk/zgc 21

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 164ms 3.0ms 159.4MB 237ms 43ms openjdk 23
java 1-m.java 169ms 2.5ms 206.0MB 230ms 50ms openjdk 21
java 1-m.java 212ms 11ms 254.4MB 347ms 70ms graal/jvm 17.0.8
java 1.java 413ms 7.7ms 341.8MB 217ms 277ms openjdk/zgc 21

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 354ms 1.7ms 1.5MB 343ms 0ms odin 2024
odin 1-i.odin 359ms 4.3ms 1.5MB 350ms 0ms odin 2024
java 1.java 444ms 0.6ms 45.2MB 483ms 17ms openjdk 21
java 1.java 447ms 0.7ms 47.7MB 477ms 13ms openjdk 23
java 1.java 447ms 5.0ms 81.4MB 477ms 30ms graal/jvm 17.0.8
java 1.java 572ms 3.7ms 44.7MB 493ms 140ms openjdk/zgc 21
java 2.java 1244ms 20ms 606.7MB 1363ms 87ms openjdk 21
java 2.java 1262ms 3.5ms 766.4MB 1373ms 110ms openjdk 23
java 2.java 3247ms 12ms 2328.0MB 1667ms 1787ms openjdk/zgc 21

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 38ms 0.9ms 1.5MB 30ms 0ms odin 2024
odin 1-i.odin 38ms 0.9ms 1.5MB 30ms 0ms odin 2024
java 1.java 118ms 3.1ms 45.7MB 150ms 20ms openjdk 21
java 1-m.java 123ms 1.2ms 81.5MB 153ms 33ms graal/jvm 17.0.8
java 1.java 125ms 2.6ms 48.1MB 163ms 20ms openjdk 23
java 1.java 242ms 5.6ms 44.8MB 153ms 143ms openjdk/zgc 21
java 2-m.java 299ms 6.1ms 371.3MB 443ms 53ms openjdk 21
java 2-m.java 304ms 5.0ms 400.0MB 430ms 73ms openjdk 23
java 2.java 681ms 16ms 531.1MB 473ms 403ms openjdk/zgc 21

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 292ms 9.6ms 40.5MB 277ms 0ms odin 2024
java 1.java 406ms 0.6ms 118.3MB 450ms 20ms openjdk 23
java 1.java 410ms 4.4ms 115.7MB 467ms 23ms openjdk 21
java 1.java 580ms 15ms 112.5MB 487ms 167ms openjdk/zgc 21
java 1-m.java 642ms 15ms 230.6MB 930ms 73ms graal/jvm 17.0.8
odin 2.odin 676ms 9.4ms 6.5MB 663ms 0ms odin 2024
java 2.java 789ms 3.2ms 60.2MB 837ms 17ms openjdk 23
java 2.java 789ms 14ms 57.3MB 843ms 17ms openjdk 21
java 2.java 853ms 0.7ms 53.1MB 783ms 147ms openjdk/zgc 21
java 2-m.java 1382ms 44ms 281.8MB 2483ms 103ms graal/jvm 17.0.8

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 56ms 1.1ms 11.3MB 50ms 0ms odin 2024
java 1.java 152ms 6.3ms 68.3MB 200ms 20ms openjdk 23
java 1.java 158ms 1.2ms 64.7MB 203ms 20ms openjdk 21
odin 2.odin 176ms 8.9ms 2.8MB 167ms 0ms odin 2024
java 1-m.java 209ms 9.5ms 137.2MB 290ms 47ms graal/jvm 17.0.8
java 2.java 261ms 0.2ms 50.5MB 310ms 23ms openjdk 23
java 2.java 262ms 2.4ms 50.0MB 327ms 20ms openjdk 21
java 1.java 292ms 0.5ms 61.4MB 207ms 153ms openjdk/zgc 21
java 2.java 376ms 1.5ms 47.4MB 303ms 143ms openjdk/zgc 21
java 2-m.java 522ms 73ms 149.7MB 937ms 60ms graal/jvm 17.0.8

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 3255ms 3.2ms 443.5MB 3677ms 110ms graal/jvm 17.0.8
java 1.java 3749ms 36ms 431.4MB 4663ms 113ms openjdk 21
java 1.java 3811ms 14ms 432.3MB 4623ms 120ms openjdk 23
java 1.java timeout 0.0ms 1904.3MB 4737ms 1153ms openjdk/zgc 21

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 901ms 3.0ms 441.7MB 1270ms 93ms graal/jvm 17.0.8
java 1-m.java 1002ms 34ms 421.9MB 1797ms 97ms openjdk 21
java 1-m.java 1005ms 13ms 435.3MB 1803ms 107ms openjdk 23
java 1.java 2055ms 14ms 1339.4MB 1730ms 1090ms openjdk/zgc 21

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 3.java timeout 0.0ms 395.5MB 5400ms 83ms graal/jvm 17.0.8
java 3.java timeout 0.0ms 302.3MB 5337ms 60ms openjdk 21
java 3.java timeout 0.0ms 304.9MB 5327ms 60ms openjdk 23
java 3.java timeout 0.0ms 468.6MB 4963ms 300ms openjdk/zgc 21

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 3-m.java 780ms 15ms 176.2MB 1167ms 50ms graal/jvm 17.0.8
java 3-m.java 809ms 7.9ms 132.5MB 1247ms 37ms openjdk 23
java 3-m.java 827ms 31ms 129.7MB 1240ms 33ms openjdk 21
java 3.java 964ms 7.0ms 134.3MB 1160ms 190ms openjdk/zgc 21

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 1989ms 6.0ms 47.5MB 7610ms 27ms openjdk 21
java 2-m.java 2003ms 3.3ms 48.8MB 7670ms 30ms openjdk 23
java 2-m.java 2130ms 11ms 45.6MB 7617ms 150ms openjdk/zgc 21
java 2-m.java 2519ms 12ms 94.9MB 9443ms 43ms graal/jvm 17.0.8
odin 1.odin 3602ms 4.1ms 2.9MB 3593ms 0ms odin 2024

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 605ms 4.4ms 47.7MB 2143ms 20ms openjdk 21
java 2-m.java 610ms 12ms 48.8MB 2173ms 20ms openjdk 23
java 2-m.java 723ms 12ms 45.4MB 2133ms 147ms openjdk/zgc 21
java 2-m.java 772ms 6.4ms 95.1MB 2720ms 43ms graal/jvm 17.0.8
odin 1.odin 902ms 0.5ms 2.3MB 890ms 0ms odin 2024

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
odin 1.odin 229ms 0.7ms 1.9MB 220ms 0ms odin 2024
java 2-m.java 252ms 0.8ms 47.2MB 763ms 20ms openjdk 21
java 2-m.java 259ms 4.4ms 48.9MB 783ms 23ms openjdk 23
java 2-m.java 308ms 10ms 95.0MB 930ms 33ms graal/jvm 17.0.8
java 2-m.java 379ms 7.6ms 45.1MB 753ms 147ms openjdk/zgc 21

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 2058ms 240ms 261.7MB 7780ms 137ms openjdk 21
java 1-m.java 2357ms 112ms 243.2MB 8950ms 133ms openjdk 23
java 1-m.java 2848ms 215ms 1230.8MB 9240ms 1087ms openjdk/zgc 21

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 442ms 9.8ms 122.8MB 1457ms 63ms openjdk 21
java 1-m.java 449ms 6.6ms 94.4MB 1477ms 53ms openjdk 23
java 1-m.java 652ms 4.9ms 212.8MB 1733ms 267ms openjdk/zgc 21