Kotlin VS Go benchmarks

Current benchmark data was generated on Sun Jan 29 2023, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz (Model 106)

* -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 637ms 22ms 413.1MB 650ms 83ms kotlin/jvm 17.0.2
go 1.go 3040ms 4.2ms 45.1MB 4367ms 53ms go 1.19.5
go 1.go 3913ms 11ms 39.6MB 3890ms 7ms tinygo 0.25.0
kotlin 1.kt timeout 0.0ms 214.4MB 8513ms 1040ms kotlin/native 1.8.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 126ms 1.9ms 109.3MB 110ms 27ms kotlin/jvm 17.0.2
go 1.go 274ms 7.4ms 8.2MB 337ms 7ms go 1.19.5
go 1.go 349ms 1.6ms 7.1MB 337ms 0ms tinygo 0.25.0
kotlin 1-m.kt 498ms 4.9ms 30.5MB 830ms 97ms kotlin/native 1.8.0

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 736ms 89ms 13.6MB 1430ms 0ms go 1.19.5
go 1.go 1700ms 13ms 257.5MB 1640ms 40ms tinygo 0.25.0
kotlin 1.kt 2838ms 51ms 154.4MB 3633ms 70ms kotlin/jvm 17.0.2
kotlin 2-m.kt 3112ms 65ms 160.9MB 5930ms 70ms kotlin/jvm 17.0.2
kotlin 1.kt timeout 0.0ms 10.8MB 6237ms 273ms kotlin/native 1.8.0
kotlin 2-m.kt timeout 0.0ms 32.3MB 9277ms 130ms kotlin/native 1.8.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 59ms 5.2ms 7.4MB 93ms 0ms go 1.19.5
go 1.go 270ms 1.1ms 66.3MB 250ms 3ms tinygo 0.25.0
kotlin 1-m.kt 706ms 31ms 100.0MB 1227ms 43ms kotlin/jvm 17.0.2
kotlin 2-m.kt 847ms 31ms 23.0MB 1523ms 23ms kotlin/native 1.8.0
kotlin 2-m.kt 983ms 35ms 100.4MB 1770ms 33ms kotlin/jvm 17.0.2
kotlin 1.kt 1022ms 5.5ms 8.8MB 1277ms 57ms kotlin/native 1.8.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 1.4ms 0.5ms 0.1MB 0ms 0ms tinygo 0.25.0
kotlin 1.kt 2.4ms 0.6ms 2.7MB 0ms 0ms kotlin/native 1.8.0
go 1.go 2.6ms 0.4ms 2.9MB 0ms 0ms go 1.19.5
kotlin 1.kt 68ms 1.8ms 40.9MB 50ms 4ms kotlin/jvm 17.0.2

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-http2.go 162ms 4.1ms 57.5MB 227ms 53ms go 1.19.5
go 1-m.go 583ms 26ms 174.0MB 557ms 353ms go 1.19.5
go 2-m.go 638ms 88ms 180.1MB 650ms 383ms go 1.19.5
kotlin 1.kt timeout 0.0ms 251.2MB 8897ms 667ms kotlin/jvm 17.0.2
kotlin 2.kt timeout 0.0ms 311.1MB 8893ms 620ms kotlin/jvm 17.0.2

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-http2.go 40ms 1.2ms 24.8MB 37ms 13ms go 1.19.5
go 2.go 102ms 33ms 37.4MB 57ms 47ms go 1.19.5
go 1.go 130ms 16ms 36.9MB 90ms 53ms go 1.19.5
kotlin 2.kt 2540ms 64ms 201.4MB 2793ms 183ms kotlin/jvm 17.0.2
kotlin 1-m.kt 2622ms 5.8ms 190.0MB 4000ms 290ms kotlin/jvm 17.0.2

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 2-ffi.go 73ms 2.3ms 41.9MB 57ms 10ms go 1.19.5
go 1.go 171ms 4.2ms 20.2MB 157ms 7ms go 1.19.5
kotlin 1-m.kt 1142ms 8.4ms 217.5MB 1933ms 87ms kotlin/jvm 17.0.2

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 2-ffi.go 420ms 3.3ms 188.8MB 380ms 123ms go 1.19.5
go 1.go 1078ms 2.7ms 102.5MB 1053ms 57ms go 1.19.5
kotlin 1-m.kt 4104ms 270ms 1188.0MB 5900ms 297ms kotlin/jvm 17.0.2

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 165ms 0.5ms 0.3MB 160ms 0ms tinygo 0.25.0
go 3.go 175ms 1.8ms 2.9MB 160ms 0ms go 1.19.5
kotlin 2-m.kt 223ms 7.8ms 113.7MB 313ms 33ms kotlin/jvm 17.0.2
kotlin 1.kt 235ms 8.3ms 109.5MB 287ms 27ms kotlin/jvm 17.0.2
kotlin 2-m.kt 447ms 4.4ms 42.5MB 747ms 3ms kotlin/native 1.8.0
kotlin 1.kt timeout 0.0ms 15.0MB 5000ms 3ms kotlin/native 1.8.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 2.kt 370ms 3.7ms 113.5MB 463ms 37ms kotlin/jvm 17.0.2
kotlin 1.kt 456ms 3.4ms 132.4MB 513ms 17ms kotlin/jvm 17.0.2
go 3.go 490ms 0.1ms 0.3MB 480ms 0ms tinygo 0.25.0
go 3.go 518ms 3.2ms 2.9MB 503ms 0ms go 1.19.5
kotlin 2-m.kt 1371ms 27ms 145.0MB 2247ms 63ms kotlin/native 1.8.0
kotlin 1.kt timeout 0.0ms 15.0MB 4997ms 3ms kotlin/native 1.8.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 81ms 0.2ms 0.0MB 70ms 0ms tinygo 0.25.0
go 3.go 94ms 2.8ms 3.9MB 87ms 0ms go 1.19.5
kotlin 1.kt 171ms 5.5ms 74.0MB 233ms 13ms kotlin/jvm 17.0.2
kotlin 2-m.kt 182ms 4.2ms 78.2MB 253ms 20ms kotlin/jvm 17.0.2
kotlin 2-m.kt 230ms 8.2ms 32.3MB 390ms 7ms kotlin/native 1.8.0
kotlin 1.kt timeout 0.0ms 17.1MB 4993ms 7ms kotlin/native 1.8.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 462ms 24ms 560.0MB 447ms 70ms kotlin/jvm 17.0.2
go 1.go 1997ms 15ms 40.3MB 2810ms 27ms go 1.19.5
go 2.go 2327ms 59ms 41.8MB 3230ms 67ms go 1.19.5
kotlin 1-m.kt 2769ms 141ms 140.6MB 4437ms 550ms kotlin/native 1.8.0
go 1.go 3809ms 7.3ms 213.3MB 3757ms 40ms tinygo 0.25.0
go 2.go timeout 0.0ms 90.8MB 4977ms 10ms tinygo 0.25.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 178ms 1.2ms 221.3MB 157ms 50ms kotlin/jvm 17.0.2
go 1.go 424ms 6.7ms 12.4MB 573ms 10ms go 1.19.5
go 2.go 492ms 6.9ms 14.7MB 657ms 17ms go 1.19.5
kotlin 1-m.kt 520ms 3.0ms 38.4MB 823ms 90ms kotlin/native 1.8.0
go 1.go 656ms 1.2ms 51.1MB 637ms 3ms tinygo 0.25.0
go 2.go 1264ms 2.6ms 38.6MB 1247ms 3ms tinygo 0.25.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 456ms 1.4ms 2.9MB 440ms 0ms go 1.19.5
kotlin 1n.kt 558ms 17ms 1.5MB 550ms 0ms kotlin/native 1.8.0
kotlin 1.kt 573ms 5.3ms 42.8MB 577ms 17ms kotlin/jvm 17.0.2
go 1.go 843ms 1.0ms 0.0MB 830ms 0ms tinygo 0.25.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 51ms 3.8ms 2.9MB 40ms 0ms go 1.19.5
kotlin 1n.kt 59ms 1.8ms 1.5MB 47ms 0ms kotlin/native 1.8.0
go 1.go 86ms 0.6ms 0.0MB 80ms 0ms tinygo 0.25.0
kotlin 1.kt 137ms 3.7ms 42.8MB 143ms 7ms kotlin/jvm 17.0.2

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 1390ms 1.4ms 8.5MB 1367ms 7ms go 1.19.5
kotlin 1.kt timeout 0.0ms 209.1MB 5367ms 70ms kotlin/jvm 17.0.2
kotlin 1n.kt timeout 0.0ms 8.9MB 6317ms 127ms kotlin/native 1.8.0
kotlin 2n.kt timeout 0.0ms 10.5MB 5033ms 87ms kotlin/native 1.8.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 335ms 5.3ms 8.4MB 317ms 0ms go 1.19.5
kotlin 1.kt 1451ms 36ms 224.1MB 1807ms 43ms kotlin/jvm 17.0.2
kotlin 1n.kt timeout 0.0ms 14.9MB 6290ms 127ms kotlin/native 1.8.0
kotlin 2n.kt timeout 0.0ms 9.1MB 5033ms 93ms kotlin/native 1.8.0

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 110.9MB 4963ms 83ms go 1.19.5
go 3.go timeout 0.0ms 120.9MB 4960ms 30ms tinygo 0.25.0
kotlin 1.kt timeout 0.0ms 161.4MB 5330ms 47ms kotlin/jvm 17.0.2
kotlin 1n.kt timeout 0.0ms 277.3MB 5660ms 510ms kotlin/native 1.8.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 1080ms 4.0ms 95.7MB 1457ms 30ms kotlin/jvm 17.0.2
go 3.go 2536ms 6.2ms 17.8MB 2510ms 27ms go 1.19.5
kotlin 1n.kt 4371ms 24ms 65.2MB 5643ms 20ms kotlin/native 1.8.0
go 3.go timeout 0.0ms 30.2MB 4987ms 0ms tinygo 0.25.0

secp256k1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 0-ffi.go 173ms 4.1ms 10.1MB 160ms 3ms go 1.19.5
kotlin 1.kt 4484ms 24ms 183.5MB 5367ms 77ms kotlin/jvm 17.0.2

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 0-ffi.go 57ms 1.2ms 9.6MB 43ms 0ms go 1.19.5
kotlin 1-m.kt 1366ms 12ms 187.1MB 2070ms 50ms kotlin/jvm 17.0.2