Go VS Kotlin benchmarks

Current benchmark data was generated on Tue Mar 25 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
kotlin 1.kt 482ms 0.5ms 578.0MB 560ms 90ms kotlin/jvm 21
go 1.go 1269ms 2.1ms 54.9MB 1247ms 7ms tinygo 0.37.0
go 1-m.go 2414ms 64ms 46.3MB 5500ms 40ms go 1.24.1
kotlin 1-m.kt 3201ms 42ms 246.5MB 5153ms 850ms kotlin/native 1.8.21

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 107ms 0.7ms 160.3MB 117ms 27ms kotlin/jvm 21
go 1.go 117ms 2.2ms 5.6MB 107ms 0ms tinygo 0.37.0
go 1-m.go 211ms 1.3ms 7.9MB 373ms 10ms go 1.24.1
kotlin 1-m.kt 283ms 2.6ms 30.5MB 453ms 67ms kotlin/native 1.8.21

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 457ms 43ms 14.8MB 1773ms 0ms go 1.24.1
go 1.go 741ms 2.7ms 269.0MB 683ms 43ms tinygo 0.37.0
kotlin 2-m.kt 1971ms 329ms 240.9MB 7313ms 117ms kotlin/jvm 21
kotlin 1.kt 2173ms 16ms 221.5MB 2997ms 77ms kotlin/jvm 21
kotlin 1.kt timeout 0.0ms 12.7MB 5997ms 487ms kotlin/native 1.8.21
kotlin 2-m.kt timeout 0.0ms 69.6MB 19047ms 153ms kotlin/native 1.8.21

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 42ms 3.4ms 7.5MB 137ms 0ms go 1.24.1
go 1.go 73ms 2.2ms 68.8MB 50ms 10ms tinygo 0.37.0
kotlin 2-m.kt 432ms 2.7ms 14.5MB 1600ms 20ms kotlin/native 1.8.21
kotlin 1-m.kt 468ms 13ms 76.2MB 1060ms 43ms kotlin/jvm 21
kotlin 1.kt 689ms 14ms 8.8MB 817ms 63ms kotlin/native 1.8.21
kotlin 2-m.kt 815ms 9.7ms 96.8MB 2827ms 77ms kotlin/jvm 21

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 120ms 0.5ms 10.3MB 110ms 0ms go 1.24.1

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 34ms 0.7ms 8.2MB 30ms 0ms go 1.24.1

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3-m.go 688ms 26ms 3.5MB 2590ms 0ms go 1.24.1
go 3.go 2017ms 0.3ms 48.6MB 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 74ms 0.4ms 5.6MB 197ms 0ms go 1.24.1
go 3.go 194ms 0.5ms 49.0MB 173ms 3ms tinygo 0.37.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3-m.go 127ms 1.0ms 7.5MB 377ms 3ms go 1.24.1

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3-m.go 17ms 0.2ms 7.5MB 33ms 0ms go 1.24.1

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.3ms 0.7ms 3.4MB 0ms 0ms go 1.24.1
kotlin 1.kt 2.2ms 0.4ms 2.6MB 0ms 0ms kotlin/native 1.8.21
kotlin 1.kt 59ms 4.0ms 47.2MB 56ms 16ms kotlin/jvm 21

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-http2.go 123ms 7.0ms 56.3MB 340ms 93ms go 1.24.1
go 1-m.go 427ms 28ms 170.8MB 743ms 673ms go 1.24.1
go 2-m.go 435ms 0.9ms 168.4MB 703ms 713ms go 1.24.1
kotlin 2-m.kt 4877ms 110ms 433.3MB 14973ms 2650ms kotlin/jvm 21
kotlin 1.kt timeout 0.0ms 400.8MB 16150ms 2810ms kotlin/jvm 21

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-http2.go 30ms 1.4ms 25.6MB 53ms 20ms go 1.24.1
go 1-m.go 76ms 6.3ms 36.7MB 100ms 110ms go 1.24.1
go 2-m.go 77ms 12ms 33.7MB 93ms 120ms go 1.24.1
kotlin 1-m.kt 2051ms 215ms 216.8MB 5830ms 630ms kotlin/jvm 21
kotlin 2-m.kt 2169ms 316ms 243.8MB 3967ms 420ms kotlin/jvm 21

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 2-ffi.go 47ms 2.4ms 41.1MB 37ms 7ms go 1.24.1
go 1.go 144ms 4.5ms 18.8MB 137ms 0ms go 1.24.1
kotlin 1-m.kt 860ms 106ms 201.0MB 2313ms 90ms kotlin/jvm 21

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 2-ffi.go 255ms 13ms 151.3MB 243ms 50ms go 1.24.1
go 1.go 760ms 6.5ms 107.0MB 747ms 13ms go 1.24.1
kotlin 1-m.kt 2344ms 51ms 740.7MB 5013ms 167ms kotlin/jvm 21

knucleotide

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 7-m.go 689ms 8.1ms 40.1MB 2413ms 33ms go 1.24.1

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 7-m.go 131ms 3.0ms 22.7MB 347ms 20ms go 1.24.1

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 123ms 2.4ms 3.5MB 113ms 0ms go 1.24.1
go 3.go 134ms 3.6ms 0.5MB 127ms 0ms tinygo 0.37.0
kotlin 1-m.kt 181ms 4.2ms 96.8MB 300ms 27ms kotlin/jvm 21
kotlin 2-m.kt 198ms 2.0ms 103.5MB 420ms 40ms kotlin/jvm 21
kotlin 2.kt 310ms 2.1ms 5.9MB 433ms 20ms kotlin/native 1.8.21
kotlin 1.kt 518ms 11ms 5.8MB 620ms 3ms kotlin/native 1.8.21

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 2-m.kt 307ms 3.5ms 215.7MB 537ms 43ms kotlin/jvm 21
kotlin 1.kt 335ms 2.6ms 204.7MB 443ms 43ms kotlin/jvm 21
go 3.go 385ms 7.4ms 3.5MB 377ms 0ms go 1.24.1
go 3.go 389ms 4.4ms 0.5MB 377ms 0ms tinygo 0.37.0
kotlin 2.kt 927ms 16ms 7.1MB 1330ms 50ms kotlin/native 1.8.21
kotlin 1.kt 1539ms 8.4ms 5.8MB 1870ms 23ms kotlin/native 1.8.21

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 52ms 2.6ms 3.5MB 43ms 0ms go 1.24.1
go 3.go 65ms 2.0ms 0.4MB 57ms 0ms tinygo 0.37.0
kotlin 2.kt 142ms 1.4ms 3.6MB 200ms 0ms kotlin/native 1.8.21
kotlin 1-m.kt 142ms 1.4ms 92.3MB 267ms 30ms kotlin/jvm 21
kotlin 2-m.kt 153ms 3.2ms 95.8MB 303ms 30ms kotlin/jvm 21
kotlin 1.kt 171ms 1.8ms 3.8MB 217ms 0ms kotlin/native 1.8.21

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 3230ms 5.6ms 7.7MB 3220ms 0ms go 1.24.1
go 1.go 4083ms 22ms 3.4MB 4073ms 0ms tinygo 0.37.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 139ms 2.7ms 3.6MB 130ms 0ms go 1.24.1
go 1.go 170ms 0.3ms 0.5MB 160ms 0ms tinygo 0.37.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 361ms 2.6ms 681.5MB 383ms 97ms kotlin/jvm 21
go 1.go 886ms 4.8ms 63.1MB 863ms 10ms tinygo 0.37.0
go 2.go 1140ms 2.7ms 55.0MB 1113ms 10ms tinygo 0.37.0
go 1-m.go 1477ms 1.1ms 45.0MB 3100ms 50ms go 1.24.1
kotlin 1-m.kt 1532ms 6.5ms 134.6MB 2337ms 353ms kotlin/native 1.8.21
go 2-m.go 1708ms 9.0ms 40.9MB 3773ms 33ms go 1.24.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 133ms 0.6ms 208.5MB 157ms 37ms kotlin/jvm 21
go 1.go 175ms 2.5ms 9.8MB 160ms 0ms tinygo 0.37.0
go 2.go 209ms 3.5ms 17.1MB 193ms 0ms tinygo 0.37.0
kotlin 1-m.kt 312ms 1.7ms 38.5MB 457ms 73ms kotlin/native 1.8.21
go 1-m.go 343ms 10ms 12.3MB 687ms 17ms go 1.24.1
go 2-m.go 376ms 1.3ms 14.0MB 800ms 27ms go 1.24.1

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 350ms 2.9ms 0.4MB 340ms 0ms tinygo 0.37.0
go 1.go 352ms 2.1ms 3.5MB 343ms 0ms go 1.24.1
kotlin 1n.kt 404ms 1.3ms 2.5MB 393ms 0ms kotlin/native 1.8.21
kotlin 1.kt 453ms 4.2ms 49.4MB 497ms 20ms kotlin/jvm 21

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 37ms 0.8ms 0.4MB 30ms 0ms tinygo 0.37.0
go 1.go 39ms 1.2ms 3.5MB 30ms 0ms go 1.24.1
kotlin 1n.kt 44ms 0.5ms 2.5MB 37ms 0ms kotlin/native 1.8.21
kotlin 1.kt 123ms 1.5ms 49.5MB 170ms 13ms kotlin/jvm 21

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 298ms 11ms 39.8MB 287ms 0ms tinygo 0.37.0
go 1.go 319ms 10ms 71.7MB 300ms 3ms go 1.24.1
go 2.go 429ms 0.7ms 20.3MB 420ms 0ms tinygo 0.37.0
go 2.go 746ms 4.0ms 21.5MB 733ms 3ms go 1.24.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 54ms 3.4ms 10.1MB 43ms 0ms tinygo 0.37.0
go 1.go 59ms 3.4ms 21.7MB 50ms 0ms go 1.24.1
go 2.go 108ms 0.7ms 4.9MB 100ms 0ms tinygo 0.37.0
go 2.go 184ms 1.0ms 6.1MB 173ms 0ms go 1.24.1

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 1188ms 4.7ms 8.6MB 1177ms 0ms go 1.24.1
kotlin 1.kt 3765ms 63ms 355.2MB 4593ms 107ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 5.4MB 6277ms 300ms kotlin/native 1.8.21
kotlin 2n.kt timeout 0.0ms 6.3MB 4990ms 180ms kotlin/native 1.8.21

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 282ms 2.2ms 8.6MB 270ms 0ms go 1.24.1
kotlin 1-m.kt 1000ms 30ms 355.3MB 1780ms 93ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 5.4MB 6287ms 287ms kotlin/native 1.8.21
kotlin 2n.kt timeout 0.0ms 6.2MB 5010ms 157ms kotlin/native 1.8.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.3MB 4977ms 50ms go 1.24.1
go 3.go timeout 0.0ms 135.0MB 4973ms 10ms tinygo 0.37.0
kotlin 1.kt timeout 0.0ms 171.3MB 5430ms 43ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 277.0MB 5163ms 730ms kotlin/native 1.8.21

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1-m.kt 821ms 21ms 137.7MB 1247ms 47ms kotlin/jvm 21
go 3.go 1778ms 45ms 20.0MB 1760ms 27ms go 1.24.1
go 3.go 2278ms 37ms 27.6MB 2260ms 3ms tinygo 0.37.0
kotlin 1n.kt 3187ms 12ms 65.0MB 3933ms 17ms kotlin/native 1.8.21

secp256k1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 0-ffi.go 91ms 1.2ms 7.3MB 83ms 0ms go 1.24.1
kotlin 1.kt 3098ms 21ms 233.4MB 3973ms 77ms kotlin/jvm 21

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 0-ffi.go 25ms 0.5ms 5.2MB 20ms 0ms go 1.24.1
kotlin 1-m.kt 1009ms 48ms 235.5MB 1923ms 73ms kotlin/jvm 21

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 1909ms 14ms 5.4MB 7403ms 3ms go 1.24.1
go 1.go 3659ms 17ms 5.5MB 3650ms 3ms 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.7ms 5.5MB 1840ms 0ms go 1.24.1
go 1.go 916ms 2.1ms 3.5MB 907ms 0ms go 1.24.1
go 1.go 1397ms 0.6ms 0.5MB 1390ms 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.9ms 5.6MB 457ms 0ms go 1.24.1
go 1.go 232ms 1.7ms 3.5MB 223ms 0ms go 1.24.1
go 1.go 351ms 0.3ms 0.4MB 340ms 0ms tinygo 0.37.0