Java VS Go benchmarks

Current benchmark data was generated on Mon Mar 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 446ms 6.6ms 574.3MB 540ms 80ms openjdk 21
java 2-m.java 461ms 12ms 639.3MB 650ms 120ms graal/jvm 17.0.8
java 2.java 467ms 4.6ms 626.3MB 577ms 97ms openjdk 23
go 1.go 1214ms 12ms 55.0MB 1190ms 10ms tinygo 0.37.0
java 2.java 1242ms 10ms 1063.4MB 587ms 813ms openjdk/zgc 21
go 1-m.go 2372ms 13ms 46.1MB 5267ms 43ms go 1.24.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 115ms 1.5ms 5.6MB 107ms 0ms tinygo 0.37.0
java 2-m.java 122ms 0.5ms 168.2MB 157ms 33ms openjdk 21
java 2-m.java 126ms 6.9ms 98.0MB 163ms 30ms openjdk 23
java 2-m.java 147ms 7.7ms 226.3MB 220ms 57ms graal/jvm 17.0.8
go 1-m.go 209ms 0.5ms 8.0MB 370ms 10ms go 1.24.1
java 2.java 305ms 2.4ms 241.7MB 147ms 210ms openjdk/zgc 21

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 117ms 1.7ms 8.4MB 110ms 0ms go 1.24.1
java 1-m.java 610ms 52ms 266.2MB 1650ms 67ms openjdk 21
java 1-m.java 611ms 12ms 371.3MB 1183ms 107ms graal/jvm 17.0.8
java 1-m.java 662ms 27ms 244.0MB 1750ms 73ms openjdk 23
java 1-m.java 959ms 39ms 495.7MB 1580ms 417ms openjdk/zgc 21

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 33ms 0.5ms 8.2MB 23ms 0ms go 1.24.1
java 1-m.java 296ms 14ms 226.0MB 593ms 63ms graal/jvm 17.0.8
java 1-m.java 327ms 2.6ms 195.7MB 893ms 57ms openjdk 21
java 1-m.java 384ms 14ms 126.9MB 1043ms 53ms openjdk 23
java 1-m.java 496ms 4.6ms 214.8MB 960ms 220ms openjdk/zgc 21

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3-m.go 670ms 3.5ms 5.5MB 2587ms 0ms go 1.24.1
java 1-m.java 903ms 5.1ms 95.3MB 3317ms 37ms graal/jvm 17.0.8
java 1-m.java 961ms 4.1ms 48.5MB 3580ms 23ms openjdk 21
java 1-m.java 980ms 5.9ms 50.1MB 3620ms 23ms openjdk 23
java 1-m.java 1035ms 21ms 45.9MB 3390ms 140ms openjdk/zgc 21
go 3.go 2017ms 1.1ms 49.1MB 1997ms 7ms tinygo 0.37.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3-m.go 73ms 1.0ms 5.6MB 200ms 0ms go 1.24.1
java 1-m.java 175ms 4.6ms 48.6MB 487ms 23ms openjdk 21
go 3.go 189ms 1.4ms 49.1MB 170ms 3ms tinygo 0.37.0
java 1-m.java 192ms 6.8ms 51.1MB 497ms 27ms openjdk 23
java 1-m.java 199ms 9.2ms 96.0MB 560ms 40ms graal/jvm 17.0.8
java 1-m.java 303ms 6.5ms 45.8MB 503ms 137ms openjdk/zgc 21

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3-m.go 124ms 1.1ms 7.5MB 373ms 0ms go 1.24.1
java 4.java 438ms 1.8ms 100.5MB 603ms 43ms graal/jvm 17.0.8
java 4.java 455ms 3.1ms 47.6MB 537ms 20ms openjdk 21
java 4.java 458ms 2.9ms 49.1MB 547ms 17ms openjdk 23
java 4.java 570ms 1.8ms 45.0MB 543ms 137ms openjdk/zgc 21

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3-m.go 17ms 1.3ms 7.5MB 30ms 0ms go 1.24.1
java 4.java 123ms 1.3ms 46.6MB 163ms 13ms openjdk 21
java 4.java 125ms 5.6ms 47.9MB 170ms 17ms openjdk 23
java 4-m.java 136ms 11ms 95.6MB 203ms 37ms graal/jvm 17.0.8
java 4.java 247ms 1.3ms 43.9MB 167ms 140ms openjdk/zgc 21

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 0.9ms 0.1ms 0.4MB 0ms 0ms tinygo 0.37.0
go 1.go 1.5ms 0.1ms 3.4MB 0ms 0ms go 1.24.1
java 1.java 61ms 2.2ms 52.6MB 64ms 20ms graal/jvm 17.0.8
java 1.java 68ms 7.8ms 43.6MB 76ms 12ms openjdk 21
java 1.java 72ms 4.4ms 44.7MB 78ms 16ms openjdk 23
java 1.java 195ms 7.0ms 43.0MB 86ms 138ms openjdk/zgc 21

knucleotide

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 7-m.go 680ms 12ms 42.1MB 2393ms 30ms go 1.24.1
java 3-m.java 1065ms 28ms 129.8MB 3650ms 37ms openjdk 21
java 3-m.java 1100ms 41ms 156.1MB 3827ms 53ms openjdk 23
java 3-m.java 1115ms 11ms 177.5MB 3837ms 57ms graal/jvm 17.0.8
java 3-m.java 1444ms 60ms 179.1MB 4560ms 210ms openjdk/zgc 21

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 7-m.go 135ms 3.6ms 23.7MB 343ms 20ms go 1.24.1
java 3-m.java 326ms 4.7ms 102.1MB 960ms 43ms openjdk 21
java 3-m.java 343ms 22ms 134.8MB 940ms 53ms graal/jvm 17.0.8
java 3-m.java 344ms 15ms 101.3MB 1017ms 43ms openjdk 23
java 3-m.java 435ms 4.6ms 98.7MB 907ms 170ms openjdk/zgc 21

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1b.java 1146ms 8.8ms 54.1MB 1247ms 17ms openjdk 21
java 1b.java 1162ms 10ms 55.3MB 1270ms 23ms openjdk 23
java 1b.java 1198ms 25ms 109.6MB 1430ms 43ms graal/jvm 17.0.8
java 1.java 1249ms 5.1ms 136.5MB 1367ms 43ms graal/jvm 17.0.8
java 1b.java 1281ms 19ms 51.5MB 1273ms 140ms openjdk/zgc 21
java 1a.java 1652ms 2.5ms 54.9MB 1747ms 20ms openjdk 21
java 1a.java 1654ms 6.1ms 56.0MB 1743ms 27ms openjdk 23
java 1a.java 1679ms 2.4ms 102.8MB 1787ms 40ms graal/jvm 17.0.8
java 1.java 1700ms 4.8ms 202.0MB 1770ms 43ms openjdk 21
java 1.java 1711ms 9.8ms 312.3MB 1763ms 57ms openjdk 23
java 1a.java 1779ms 2.3ms 51.9MB 1757ms 140ms openjdk/zgc 21
java 1.java 2388ms 7.1ms 831.5MB 1797ms 697ms openjdk/zgc 21
go 1.go 3232ms 34ms 7.7MB 3227ms 0ms go 1.24.1
go 1.go 4076ms 6.3ms 3.4MB 4067ms 0ms tinygo 0.37.0
java 2.java timeout 0.0ms 630.0MB 5257ms 117ms openjdk 21
java 2.java timeout 0.0ms 768.6MB 5283ms 120ms openjdk 23
java 2.java timeout 0.0ms 3385.3MB 3327ms 2027ms openjdk/zgc 21

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 137ms 1.7ms 3.6MB 130ms 0ms go 1.24.1
go 1.go 171ms 1.9ms 0.5MB 163ms 0ms tinygo 0.37.0
java 1b-m.java 179ms 6.3ms 50.8MB 277ms 23ms openjdk 23
java 1a-m.java 187ms 1.1ms 50.6MB 290ms 20ms openjdk 21
java 1-m.java 188ms 4.5ms 82.0MB 260ms 33ms openjdk 21
java 1b-m.java 190ms 7.1ms 49.8MB 307ms 20ms openjdk 21
java 1-m.java 192ms 5.7ms 86.9MB 263ms 30ms openjdk 23
java 1a-m.java 195ms 2.0ms 52.1MB 307ms 20ms openjdk 23
java 1-m.java 200ms 4.8ms 111.7MB 310ms 40ms graal/jvm 17.0.8
java 1b-m.java 206ms 2.0ms 99.8MB 340ms 40ms graal/jvm 17.0.8
java 1a-m.java 206ms 3.2ms 96.7MB 310ms 40ms graal/jvm 17.0.8
java 1a.java 315ms 1.1ms 48.0MB 297ms 143ms openjdk/zgc 21
java 1b.java 315ms 11ms 47.7MB 310ms 143ms openjdk/zgc 21
java 1.java 338ms 3.9ms 114.2MB 260ms 170ms openjdk/zgc 21
java 2-m.java 545ms 11ms 602.9MB 827ms 90ms openjdk 21
java 2-m.java 561ms 7.3ms 835.7MB 843ms 97ms openjdk 23
java 2.java 1624ms 57ms 1404.0MB 850ms 1090ms openjdk/zgc 21

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 395ms 3.2ms 679.6MB 470ms 87ms openjdk 21
java 1.java 403ms 1.6ms 543.2MB 493ms 93ms openjdk 23
java 1-m.java 412ms 16ms 637.2MB 607ms 107ms graal/jvm 17.0.8
go 1.go 820ms 47ms 63.2MB 797ms 10ms tinygo 0.37.0
java 1.java 1076ms 3.5ms 966.1MB 440ms 750ms openjdk/zgc 21
go 2.go 1112ms 7.9ms 55.0MB 1093ms 3ms tinygo 0.37.0
go 1-m.go 1461ms 6.1ms 39.0MB 3090ms 37ms go 1.24.1
go 2-m.go 1661ms 2.3ms 42.9MB 3680ms 40ms go 1.24.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 164ms 2.5ms 206.3MB 230ms 47ms openjdk 21
java 1-m.java 165ms 2.0ms 158.9MB 240ms 40ms openjdk 23
go 1.go 176ms 2.5ms 9.8MB 160ms 0ms tinygo 0.37.0
go 2.go 206ms 2.2ms 17.1MB 190ms 0ms tinygo 0.37.0
java 1-m.java 223ms 6.9ms 254.1MB 370ms 57ms graal/jvm 17.0.8
go 1-m.go 332ms 4.7ms 12.2MB 677ms 20ms go 1.24.1
go 2-m.go 373ms 2.8ms 13.9MB 787ms 27ms go 1.24.1
java 1.java 415ms 11ms 341.7MB 217ms 273ms openjdk/zgc 21

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 349ms 3.0ms 0.4MB 340ms 0ms tinygo 0.37.0
go 1.go 352ms 2.1ms 3.5MB 343ms 0ms go 1.24.1
java 1.java 438ms 4.2ms 48.0MB 470ms 17ms openjdk 23
java 1.java 438ms 4.3ms 45.2MB 473ms 20ms openjdk 21
java 1.java 447ms 2.7ms 81.5MB 477ms 30ms graal/jvm 17.0.8
java 1.java 570ms 1.1ms 45.0MB 487ms 143ms openjdk/zgc 21
java 2.java 1224ms 17ms 555.8MB 1360ms 67ms openjdk 21
java 2.java 1249ms 7.4ms 776.3MB 1370ms 97ms openjdk 23
java 2.java 3395ms 149ms 2652.0MB 1667ms 1940ms openjdk/zgc 21

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 37ms 0.1ms 3.5MB 30ms 0ms go 1.24.1
go 1.go 38ms 0.7ms 0.4MB 30ms 0ms tinygo 0.37.0
java 1.java 116ms 3.6ms 81.6MB 143ms 30ms graal/jvm 17.0.8
java 1.java 117ms 0.6ms 44.9MB 153ms 20ms openjdk 21
java 1.java 120ms 2.2ms 47.9MB 153ms 20ms openjdk 23
java 1.java 243ms 3.2ms 44.8MB 160ms 140ms openjdk/zgc 21
java 2-m.java 294ms 6.4ms 364.7MB 423ms 57ms openjdk 21
java 2-m.java 308ms 8.6ms 401.9MB 447ms 60ms openjdk 23
java 2.java 697ms 16ms 537.4MB 467ms 410ms openjdk/zgc 21

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 272ms 4.7ms 39.5MB 260ms 0ms tinygo 0.37.0
go 1.go 278ms 0.1ms 71.7MB 267ms 0ms go 1.24.1
java 1.java 383ms 7.9ms 114.9MB 430ms 27ms openjdk 21
java 1.java 389ms 4.7ms 118.3MB 433ms 23ms openjdk 23
go 2.go 427ms 1.8ms 21.2MB 417ms 0ms tinygo 0.37.0
java 1.java 557ms 11ms 112.8MB 463ms 167ms openjdk/zgc 21
java 1-m.java 598ms 27ms 233.2MB 870ms 70ms graal/jvm 17.0.8
go 2.go 742ms 2.8ms 21.6MB 727ms 7ms go 1.24.1
java 2.java 773ms 7.9ms 57.6MB 830ms 17ms openjdk 21
java 2.java 778ms 4.5ms 60.5MB 830ms 20ms openjdk 23
java 2.java 853ms 16ms 53.4MB 783ms 143ms openjdk/zgc 21
java 2-m.java 1372ms 31ms 247.6MB 2460ms 100ms graal/jvm 17.0.8

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 53ms 0.1ms 10.1MB 40ms 0ms tinygo 0.37.0
go 1.go 57ms 2.1ms 21.6MB 50ms 0ms go 1.24.1
go 2.go 109ms 2.0ms 4.9MB 100ms 0ms tinygo 0.37.0
java 1.java 153ms 2.7ms 68.5MB 197ms 23ms openjdk 23
java 1.java 154ms 2.2ms 64.7MB 207ms 17ms openjdk 21
go 2.go 183ms 1.8ms 6.1MB 170ms 0ms go 1.24.1
java 1-m.java 206ms 11ms 137.5MB 283ms 50ms graal/jvm 17.0.8
java 2.java 254ms 2.5ms 49.8MB 317ms 17ms openjdk 21
java 2.java 263ms 5.2ms 50.7MB 313ms 17ms openjdk 23
java 1.java 279ms 5.2ms 61.5MB 200ms 143ms openjdk/zgc 21
java 2.java 368ms 2.4ms 47.7MB 303ms 143ms openjdk/zgc 21
java 2-m.java 474ms 5.0ms 145.4MB 840ms 60ms graal/jvm 17.0.8

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 1173ms 7.7ms 8.7MB 1157ms 0ms go 1.24.1
java 1.java 3176ms 11ms 442.6MB 3620ms 87ms graal/jvm 17.0.8
java 1.java 3621ms 96ms 430.3MB 4470ms 113ms openjdk 23
java 1.java 3656ms 83ms 353.4MB 4533ms 97ms openjdk 21
java 1.java timeout 0.0ms 1831.4MB 4633ms 1227ms openjdk/zgc 21

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 280ms 1.6ms 8.6MB 270ms 0ms go 1.24.1
java 1.java 881ms 8.8ms 441.3MB 1233ms 80ms graal/jvm 17.0.8
java 1-m.java 988ms 25ms 422.8MB 1780ms 93ms openjdk 21
java 1-m.java 1002ms 24ms 437.7MB 1777ms 103ms openjdk 23
java 1.java 2030ms 37ms 1345.0MB 1667ms 1083ms openjdk/zgc 21

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go timeout 0.0ms 122.0MB 4987ms 47ms go 1.24.1
go 3.go timeout 0.0ms 136.3MB 4980ms 10ms tinygo 0.37.0
java 3.java timeout 0.0ms 407.6MB 5393ms 87ms graal/jvm 17.0.8
java 3.java timeout 0.0ms 302.3MB 5340ms 60ms openjdk 21
java 3.java timeout 0.0ms 304.8MB 5323ms 63ms openjdk 23
java 3.java timeout 0.0ms 467.8MB 4960ms 310ms openjdk/zgc 21

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 3-m.java 761ms 6.1ms 177.1MB 1127ms 53ms graal/jvm 17.0.8
java 3-m.java 795ms 12ms 130.7MB 1180ms 33ms openjdk 21
java 3-m.java 821ms 23ms 132.4MB 1233ms 33ms openjdk 23
java 3.java 980ms 36ms 134.0MB 1170ms 197ms openjdk/zgc 21
go 3.go 1752ms 13ms 19.9MB 1737ms 20ms go 1.24.1
go 3.go 2259ms 19ms 27.6MB 2243ms 0ms tinygo 0.37.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 1911ms 17ms 4.3MB 7403ms 10ms go 1.24.1
java 2-m.java 1976ms 1.3ms 47.8MB 7553ms 27ms openjdk 21
java 2-m.java 1986ms 6.0ms 48.4MB 7583ms 20ms openjdk 23
java 2-m.java 2103ms 11ms 45.5MB 7567ms 150ms openjdk/zgc 21
java 2-m.java 2484ms 35ms 94.3MB 9307ms 47ms graal/jvm 17.0.8
go 1.go 3659ms 12ms 5.6MB 3650ms 0ms go 1.24.1
go 1.go timeout 0.0ms 0.5MB 4990ms 0ms tinygo 0.37.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 481ms 0.6ms 5.5MB 1843ms 0ms go 1.24.1
java 2-m.java 606ms 6.9ms 48.4MB 2150ms 20ms openjdk 23
java 2-m.java 608ms 6.0ms 47.9MB 2147ms 20ms openjdk 21
java 2-m.java 728ms 4.7ms 45.4MB 2140ms 143ms openjdk/zgc 21
java 2-m.java 766ms 2.2ms 95.1MB 2697ms 40ms graal/jvm 17.0.8
go 1.go 916ms 4.3ms 3.5MB 910ms 0ms go 1.24.1
go 1.go 1397ms 0.4ms 0.5MB 1387ms 0ms tinygo 0.37.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 125ms 0.8ms 5.5MB 450ms 0ms go 1.24.1
go 1.go 231ms 1.3ms 3.5MB 220ms 0ms go 1.24.1
java 2-m.java 253ms 9.4ms 47.4MB 750ms 20ms openjdk 21
java 2-m.java 258ms 12ms 48.5MB 773ms 20ms openjdk 23
java 2-m.java 300ms 28ms 94.1MB 910ms 43ms graal/jvm 17.0.8
go 1.go 352ms 0.6ms 0.4MB 340ms 0ms tinygo 0.37.0
java 2-m.java 382ms 8.6ms 45.6MB 763ms 140ms openjdk/zgc 21

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 473ms 8.9ms 15.6MB 1833ms 3ms go 1.24.1
go 1.go 723ms 8.5ms 269.4MB 670ms 37ms tinygo 0.37.0
java 1-m.java 2160ms 236ms 259.0MB 8187ms 127ms openjdk 21
java 1-m.java 2442ms 127ms 242.9MB 9230ms 147ms openjdk 23
java 1-m.java 2866ms 129ms 1219.2MB 9147ms 1173ms openjdk/zgc 21

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 38ms 6.0ms 7.5MB 123ms 0ms go 1.24.1
go 1.go 70ms 2.6ms 68.3MB 50ms 10ms tinygo 0.37.0
java 1-m.java 418ms 14ms 92.2MB 1377ms 60ms openjdk 23
java 1-m.java 476ms 18ms 117.2MB 1580ms 63ms openjdk 21
java 1-m.java 673ms 18ms 230.2MB 1827ms 257ms openjdk/zgc 21