Kotlin VS Go benchmarks

Current benchmark data was generated on Sun Jun 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
kotlin 1.kt 507ms 12ms 574.5MB 603ms 97ms kotlin/jvm 21
go 1.go 1201ms 11ms 55.0MB 1180ms 10ms tinygo 0.37.0
go 1-m.go 2364ms 13ms 41.9MB 5290ms 33ms go 1.24.3
kotlin 1.kt 3832ms 23ms 145.7MB 4013ms 63ms kotlin/native 2.1.20

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 113ms 2.0ms 5.6MB 100ms 0ms tinygo 0.37.0
kotlin 1.kt 124ms 1.0ms 159.2MB 150ms 27ms kotlin/jvm 21
kotlin 1.kt 208ms 3.8ms 17.6MB 217ms 0ms kotlin/native 2.1.20
go 1-m.go 209ms 2.8ms 8.1MB 367ms 10ms go 1.24.3

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 485ms 69ms 13.5MB 1843ms 0ms go 1.24.3
go 1.go 715ms 1.6ms 269.3MB 653ms 50ms tinygo 0.37.0
kotlin 2-m.kt 1735ms 114ms 233.9MB 6417ms 103ms kotlin/jvm 21
kotlin 1.kt 2195ms 28ms 218.9MB 3027ms 70ms kotlin/jvm 21
kotlin 2-m.kt 4274ms 24ms 21.4MB 14387ms 537ms kotlin/native 2.1.20
kotlin 1.kt timeout 0.0ms 17.4MB 5507ms 27ms kotlin/native 2.1.20

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 39ms 4.1ms 7.5MB 127ms 0ms go 1.24.3
go 1.go 64ms 0.8ms 68.0MB 43ms 10ms tinygo 0.37.0
kotlin 2-m.kt 249ms 1.7ms 21.5MB 843ms 37ms kotlin/native 2.1.20
kotlin 1.kt 386ms 5.8ms 17.4MB 400ms 0ms kotlin/native 2.1.20
kotlin 1-m.kt 474ms 14ms 73.5MB 1073ms 43ms kotlin/jvm 21
kotlin 2-m.kt 923ms 20ms 101.3MB 3240ms 73ms kotlin/jvm 21

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 0.8ms 0.1ms 0.4MB 0ms 0ms tinygo 0.37.0
go 1.go 1.4ms 0.0ms 3.4MB 0ms 0ms go 1.24.3
kotlin 1.kt 2.2ms 0.1ms 3.1MB 0ms 0ms kotlin/native 2.1.20
kotlin 1.kt 62ms 0.6ms 47.7MB 74ms 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 117ms 4.7ms 58.2MB 340ms 73ms go 1.24.3
go 2-m.go 359ms 31ms 172.9MB 633ms 593ms go 1.24.3
go 1-m.go 390ms 0.5ms 178.5MB 717ms 630ms go 1.24.3
kotlin 2-m.kt 4825ms 117ms 434.8MB 15097ms 2490ms kotlin/jvm 21
kotlin 1.kt timeout 0.0ms 434.8MB 16347ms 2720ms kotlin/jvm 21

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-http2.go 31ms 2.7ms 25.5MB 57ms 17ms go 1.24.3
go 2-m.go 64ms 7.2ms 37.0MB 83ms 87ms go 1.24.3
go 1-m.go 65ms 9.9ms 37.0MB 83ms 93ms go 1.24.3
kotlin 2-m.kt 2078ms 157ms 233.3MB 5667ms 590ms kotlin/jvm 21
kotlin 1-m.kt 2112ms 39ms 272.7MB 5717ms 583ms 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 45ms 0.9ms 41.2MB 40ms 0ms go 1.24.3
go 1.go 142ms 3.5ms 18.6MB 137ms 0ms go 1.24.3
kotlin 1-m.kt 732ms 78ms 157.5MB 1977ms 67ms kotlin/jvm 21

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 2-ffi.go 253ms 11ms 163.1MB 243ms 47ms go 1.24.3
go 1.go 738ms 4.5ms 105.1MB 727ms 10ms go 1.24.3
kotlin 1-m.kt 1846ms 49ms 711.3MB 4333ms 173ms kotlin/jvm 21

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 120ms 4.7ms 3.5MB 113ms 0ms go 1.24.3
go 3.go 132ms 2.8ms 0.5MB 123ms 0ms tinygo 0.37.0
kotlin 2.kt 166ms 3.8ms 12.4MB 170ms 0ms kotlin/native 2.1.20
kotlin 1-m.kt 195ms 3.4ms 95.1MB 327ms 27ms kotlin/jvm 21
kotlin 2-m.kt 200ms 3.1ms 102.1MB 437ms 40ms kotlin/jvm 21
kotlin 1.kt 355ms 2.4ms 12.4MB 353ms 3ms kotlin/native 2.1.20

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 2-m.kt 317ms 3.3ms 213.3MB 553ms 43ms kotlin/jvm 21
kotlin 1.kt 340ms 3.7ms 203.0MB 463ms 37ms kotlin/jvm 21
go 3.go 384ms 3.9ms 0.5MB 373ms 0ms tinygo 0.37.0
go 3.go 392ms 5.4ms 3.5MB 383ms 0ms go 1.24.3
kotlin 2.kt 474ms 2.5ms 12.4MB 500ms 0ms kotlin/native 2.1.20
kotlin 1.kt 1041ms 16ms 12.5MB 1067ms 3ms kotlin/native 2.1.20

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 51ms 2.7ms 3.5MB 40ms 0ms go 1.24.3
go 3.go 64ms 1.5ms 0.4MB 57ms 0ms tinygo 0.37.0
kotlin 2.kt 94ms 0.9ms 12.8MB 83ms 0ms kotlin/native 2.1.20
kotlin 1.kt 120ms 0.5ms 12.8MB 110ms 3ms kotlin/native 2.1.20
kotlin 1-m.kt 153ms 0.0ms 90.8MB 303ms 23ms kotlin/jvm 21
kotlin 2-m.kt 161ms 4.6ms 96.1MB 343ms 30ms kotlin/jvm 21

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 384ms 3.9ms 680.1MB 450ms 87ms kotlin/jvm 21
go 1.go 877ms 10ms 63.2MB 857ms 10ms tinygo 0.37.0
go 2.go 1100ms 11ms 55.0MB 1080ms 10ms tinygo 0.37.0
go 1-m.go 1481ms 35ms 41.1MB 3197ms 37ms go 1.24.3
go 2-m.go 1665ms 17ms 43.1MB 3667ms 40ms go 1.24.3
kotlin 1.kt 1811ms 15ms 89.9MB 1887ms 43ms kotlin/native 2.1.20

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1-m.kt 158ms 4.9ms 207.2MB 210ms 43ms kotlin/jvm 21
go 1.go 173ms 0.8ms 9.8MB 160ms 0ms tinygo 0.37.0
go 2.go 205ms 6.1ms 17.1MB 190ms 0ms tinygo 0.37.0
kotlin 1.kt 255ms 3.0ms 25.3MB 260ms 10ms kotlin/native 2.1.20
go 1-m.go 333ms 1.3ms 12.2MB 673ms 23ms go 1.24.3
go 2-m.go 373ms 2.6ms 13.9MB 797ms 23ms go 1.24.3

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 347ms 4.4ms 0.4MB 340ms 0ms tinygo 0.37.0
kotlin 1n.kt 349ms 0.4ms 3.5MB 340ms 0ms kotlin/native 2.1.20
go 1.go 351ms 3.3ms 3.5MB 343ms 0ms go 1.24.3
kotlin 1.kt 446ms 2.7ms 49.3MB 490ms 20ms kotlin/jvm 21

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 38ms 1.2ms 0.4MB 30ms 0ms tinygo 0.37.0
go 1.go 38ms 0.5ms 3.5MB 30ms 0ms go 1.24.3
kotlin 1n.kt 38ms 0.7ms 3.5MB 30ms 0ms kotlin/native 2.1.20
kotlin 1-m.kt 119ms 0.7ms 49.6MB 163ms 20ms kotlin/jvm 21

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 1178ms 8.3ms 8.6MB 1163ms 7ms go 1.24.3
kotlin 1.kt 3710ms 30ms 353.2MB 4553ms 117ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 26.7MB 3983ms 1510ms kotlin/native 2.1.20
kotlin 2n.kt timeout 0.0ms 30.6MB 5117ms 133ms kotlin/native 2.1.20

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 276ms 1.1ms 8.6MB 267ms 0ms go 1.24.3
kotlin 1-m.kt 975ms 38ms 365.7MB 1740ms 93ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 26.3MB 3980ms 1510ms kotlin/native 2.1.20
kotlin 2n.kt timeout 0.0ms 30.6MB 5123ms 113ms kotlin/native 2.1.20

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.2MB 4983ms 50ms go 1.24.3
go 3.go timeout 0.0ms 133.0MB 4973ms 13ms tinygo 0.37.0
kotlin 1.kt timeout 0.0ms 173.5MB 5413ms 47ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 226.9MB 5057ms 127ms kotlin/native 2.1.20

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1-m.kt 834ms 5.0ms 134.5MB 1307ms 40ms kotlin/jvm 21
go 3.go 1756ms 39ms 20.0MB 1740ms 17ms go 1.24.3
go 3.go 2260ms 24ms 26.2MB 2247ms 0ms tinygo 0.37.0
kotlin 1n.kt 3338ms 285ms 51.2MB 3400ms 73ms kotlin/native 2.1.20

secp256k1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 0-ffi.go 92ms 0.1ms 5.2MB 90ms 0ms go 1.24.3
kotlin 1.kt 3058ms 62ms 231.8MB 4043ms 70ms 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.6ms 5.2MB 20ms 0ms go 1.24.3
kotlin 1-m.kt 964ms 26ms 231.0MB 1823ms 60ms kotlin/jvm 21