Skip to content

Instantly share code, notes, and snippets.

@ajalt
Created September 19, 2018 01:24
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ajalt/c6c120c7cc13a49bc2a8bf62d433d455 to your computer and use it in GitHub Desktop.
Save ajalt/c6c120c7cc13a49bc2a8bf62d433d455 to your computer and use it in GitHub Desktop.
Kotlin Sequence and List benchmarks
Version Benchmark Chain length Size Mode Threads Samples Score Score Error (99.9%) Unit
list FilterMap 16 10 avgt 1 5 1277.371279 147.630256 ns/op
list FilterMap 16 100 avgt 1 5 10317.769747 427.153017 ns/op
list FilterMap 16 100000 avgt 1 5 11173707.887053 482200.221613 ns/op
list FilterMap 16 10000 avgt 1 5 1008029.931625 187502.327396 ns/op
list FilterMap 16 1000 avgt 1 5 111698.610383 27879.100909 ns/op
list FilterMap 16 1000000 avgt 1 5 106054961.125894 9811365.862410 ns/op
list FilterMap 2 10 avgt 1 5 153.894645 10.388182 ns/op
list FilterMap 2 100 avgt 1 5 1338.378302 107.043631 ns/op
list FilterMap 2 100000 avgt 1 5 1277251.906548 197481.486563 ns/op
list FilterMap 2 10000 avgt 1 5 126032.382485 12090.655297 ns/op
list FilterMap 2 1000 avgt 1 5 12092.215378 1495.591296 ns/op
list FilterMap 2 1000000 avgt 1 5 14134248.769597 1720311.858707 ns/op
list FilterMapSlow 2 10 avgt 1 5 12816890.182689 185429.203849 ns/op
list FilterMapSlow 2 100 avgt 1 5 127408850.382278 2610685.994212 ns/op
list FilterMapSlow 2 1000 avgt 1 5 1289034012.500000 37178830.408821 ns/op
list FilterMap 4 10 avgt 1 5 303.048783 16.981560 ns/op
list FilterMap 4 100 avgt 1 5 2593.566459 265.269761 ns/op
list FilterMap 4 100000 avgt 1 5 2385976.201745 267580.074866 ns/op
list FilterMap 4 10000 avgt 1 5 225600.529554 26443.662527 ns/op
list FilterMap 4 1000 avgt 1 5 24657.101300 1393.101102 ns/op
list FilterMap 4 1000000 avgt 1 5 27937769.317258 2738136.179479 ns/op
list FilterMap 8 10 avgt 1 5 662.954066 37.714916 ns/op
list FilterMap 8 100 avgt 1 5 5403.228566 806.042108 ns/op
list FilterMap 8 100000 avgt 1 5 4809282.068814 264064.473641 ns/op
list FilterMap 8 10000 avgt 1 5 587773.279763 78377.873622 ns/op
list FilterMap 8 1000 avgt 1 5 54828.001003 11432.532949 ns/op
list FilterMap 8 1000000 avgt 1 5 48178032.493521 3629573.060591 ns/op
list MapFirst 0 10 avgt 1 5 11831998.102204 975944.748092 ns/op
list MapFirst 0 100 avgt 1 5 118417507.575134 9400214.083478 ns/op
list MapFirst 0 1000 avgt 1 5 1242597868.333334 23321695.648130 ns/op
seq FilterMap 16 10 avgt 1 5 1522.270493 189.367104 ns/op
seq FilterMap 16 100 avgt 1 5 13420.159025 2945.070231 ns/op
seq FilterMap 16 100000 avgt 1 5 14683267.762912 1563054.947920 ns/op
seq FilterMap 16 10000 avgt 1 5 1414022.069960 285410.936248 ns/op
seq FilterMap 16 1000 avgt 1 5 136034.296537 20794.022249 ns/op
seq FilterMap 16 1000000 avgt 1 5 150070914.168480 12281220.676090 ns/op
seq FilterMap 2 10 avgt 1 5 113.724262 23.340130 ns/op
seq FilterMap 2 100 avgt 1 5 886.639562 100.965227 ns/op
seq FilterMap 2 100000 avgt 1 5 1114471.073019 104579.097377 ns/op
seq FilterMap 2 10000 avgt 1 5 113331.613363 19047.757801 ns/op
seq FilterMap 2 1000 avgt 1 5 8452.006622 852.139007 ns/op
seq FilterMap 2 1000000 avgt 1 5 12600135.273988 819736.712129 ns/op
seq FilterMapSlow 2 10 avgt 1 5 12853240.985657 302520.763852 ns/op
seq FilterMapSlow 2 100 avgt 1 5 127087895.440506 1888198.079783 ns/op
seq FilterMapSlow 2 1000 avgt 1 5 1284489362.500000 14710935.604486 ns/op
seq FilterMap 4 10 avgt 1 5 237.735671 21.938428 ns/op
seq FilterMap 4 100 avgt 1 5 2076.299701 285.806890 ns/op
seq FilterMap 4 100000 avgt 1 5 2183836.164934 236644.888485 ns/op
seq FilterMap 4 10000 avgt 1 5 188472.074530 27674.197560 ns/op
seq FilterMap 4 1000 avgt 1 5 22206.451125 6890.664381 ns/op
seq FilterMap 4 1000000 avgt 1 5 22573632.804291 1797925.338111 ns/op
seq FilterMap 8 10 avgt 1 5 741.729337 50.554732 ns/op
seq FilterMap 8 100 avgt 1 5 6799.889998 638.194707 ns/op
seq FilterMap 8 100000 avgt 1 5 7030095.062536 936554.331832 ns/op
seq FilterMap 8 10000 avgt 1 5 692726.076515 97776.821774 ns/op
seq FilterMap 8 1000 avgt 1 5 67086.000407 6165.119676 ns/op
seq FilterMap 8 1000000 avgt 1 5 71752273.526742 13117574.540667 ns/op
seq MapFirst 0 10 avgt 1 5 4476886.396934 286629.484749 ns/op
seq MapFirst 0 100 avgt 1 5 4781034.571271 419745.305641 ns/op
seq MapFirst 0 1000 avgt 1 5 4867684.354762 137756.258942 ns/op
open class SequenceBenchmarks {
lateinit var list_10: List<Int>
lateinit var list_100: List<Int>
lateinit var list_1_000: List<Int>
lateinit var list_10_000: List<Int>
lateinit var list_100_000: List<Int>
lateinit var list_1_000_000: List<Int>
@Setup
fun setup() {
list_10 = List(10) { it }
list_100 = List(100) { it }
list_1_000 = List(1_000) { it }
list_10_000 = List(10_000) { it }
list_100_000 = List(100_000) { it }
list_1_000_000 = List(1_000_000) { it }
}
@Benchmark fun listFilterMap2slow_10() = listFilterMap2slow(list_10)
@Benchmark fun listFilterMap2slow_100() = listFilterMap2slow(list_100)
@Benchmark fun listFilterMap2slow_1_000() = listFilterMap2slow(list_1_000)
@Benchmark fun listMapFirst_10() = listMapFirst(list_10)
@Benchmark fun listMapFirst_100() = listMapFirst(list_100)
@Benchmark fun listMapFirst_1_000() = listMapFirst(list_1_000)
@Benchmark fun listFilterMap2_10() = listFilterMap2(list_10)
@Benchmark fun listFilterMap2_100() = listFilterMap2(list_100)
@Benchmark fun listFilterMap2_1_000() = listFilterMap2(list_1_000)
@Benchmark fun listFilterMap2_10_000() = listFilterMap2(list_10_000)
@Benchmark fun listFilterMap2_100_000() = listFilterMap2(list_100_000)
@Benchmark fun listFilterMap2_1_000_000() = listFilterMap2(list_1_000_000)
@Benchmark fun listFilterMap4_10() = listFilterMap4(list_10)
@Benchmark fun listFilterMap4_100() = listFilterMap4(list_100)
@Benchmark fun listFilterMap4_1_000() = listFilterMap4(list_1_000)
@Benchmark fun listFilterMap4_10_000() = listFilterMap4(list_10_000)
@Benchmark fun listFilterMap4_100_000() = listFilterMap4(list_100_000)
@Benchmark fun listFilterMap4_1_000_000() = listFilterMap4(list_1_000_000)
@Benchmark fun listFilterMap8_10() = listFilterMap8(list_10)
@Benchmark fun listFilterMap8_100() = listFilterMap8(list_100)
@Benchmark fun listFilterMap8_1_000() = listFilterMap8(list_1_000)
@Benchmark fun listFilterMap8_10_000() = listFilterMap8(list_10_000)
@Benchmark fun listFilterMap8_100_000() = listFilterMap8(list_100_000)
@Benchmark fun listFilterMap8_1_000_000() = listFilterMap8(list_1_000_000)
@Benchmark fun listFilterMap16_10() = listFilterMap16(list_10)
@Benchmark fun listFilterMap16_100() = listFilterMap16(list_100)
@Benchmark fun listFilterMap16_1_000() = listFilterMap16(list_1_000)
@Benchmark fun listFilterMap16_10_000() = listFilterMap16(list_10_000)
@Benchmark fun listFilterMap16_100_000() = listFilterMap16(list_100_000)
@Benchmark fun listFilterMap16_1_000_000() = listFilterMap16(list_1_000_000)
@Benchmark fun seqFilterMap2slow_10() = seqFilterMap2slow(list_10)
@Benchmark fun seqFilterMap2slow_100() = seqFilterMap2slow(list_100)
@Benchmark fun seqFilterMap2slow_1_000() = seqFilterMap2slow(list_1_000)
@Benchmark fun seqMapFirst_10() = seqMapFirst(list_10)
@Benchmark fun seqMapFirst_100() = seqMapFirst(list_100)
@Benchmark fun seqMapFirst_1_000() = seqMapFirst(list_1_000)
@Benchmark fun seqFilterMap2_10() = seqFilterMap2(list_10)
@Benchmark fun seqFilterMap2_100() = seqFilterMap2(list_100)
@Benchmark fun seqFilterMap2_1_000() = seqFilterMap2(list_1_000)
@Benchmark fun seqFilterMap2_10_000() = seqFilterMap2(list_10_000)
@Benchmark fun seqFilterMap2_100_000() = seqFilterMap2(list_100_000)
@Benchmark fun seqFilterMap2_1_000_000() = seqFilterMap2(list_1_000_000)
@Benchmark fun seqFilterMap4_10() = seqFilterMap4(list_10)
@Benchmark fun seqFilterMap4_100() = seqFilterMap4(list_100)
@Benchmark fun seqFilterMap4_1_000() = seqFilterMap4(list_1_000)
@Benchmark fun seqFilterMap4_10_000() = seqFilterMap4(list_10_000)
@Benchmark fun seqFilterMap4_100_000() = seqFilterMap4(list_100_000)
@Benchmark fun seqFilterMap4_1_000_000() = seqFilterMap4(list_1_000_000)
@Benchmark fun seqFilterMap8_10() = seqFilterMap8(list_10)
@Benchmark fun seqFilterMap8_100() = seqFilterMap8(list_100)
@Benchmark fun seqFilterMap8_1_000() = seqFilterMap8(list_1_000)
@Benchmark fun seqFilterMap8_10_000() = seqFilterMap8(list_10_000)
@Benchmark fun seqFilterMap8_100_000() = seqFilterMap8(list_100_000)
@Benchmark fun seqFilterMap8_1_000_000() = seqFilterMap8(list_1_000_000)
@Benchmark fun seqFilterMap16_10() = seqFilterMap16(list_10)
@Benchmark fun seqFilterMap16_100() = seqFilterMap16(list_100)
@Benchmark fun seqFilterMap16_1_000() = seqFilterMap16(list_1_000)
@Benchmark fun seqFilterMap16_10_000() = seqFilterMap16(list_10_000)
@Benchmark fun seqFilterMap16_100_000() = seqFilterMap16(list_100_000)
@Benchmark fun seqFilterMap16_1_000_000() = seqFilterMap16(list_1_000_000)
private fun listFilterMap2(list: List<Int>) = list
.filter { true }.map { it }
private fun listFilterMap4(list: List<Int>) = list
.filter { true }.map { it }.filter { true }.map { it }
private fun listFilterMap8(list: List<Int>) = list
.filter { true }.map { it }.filter { true }.map { it }
.filter { true }.map { it }.filter { true }.map { it }
private fun listFilterMap16(list: List<Int>) = list
.filter { true }.map { it }.filter { true }.map { it }
.filter { true }.map { it }.filter { true }.map { it }
.filter { true }.map { it }.filter { true }.map { it }
.filter { true }.map { it }.filter { true }.map { it }
private fun listFilterMap2slow(list: List<Int>) = list
.filter { true }.map { Thread.sleep(0, 5000); it }
private fun listMapFirst(list: List<Int>) = list
.map { Thread.sleep(0, 5000); it }.first { it > 2 }
private fun seqFilterMap2(list: List<Int>) = list
.asSequence()
.filter { true }.map { it }
.toList()
private fun seqFilterMap4(list: List<Int>) = list
.asSequence()
.filter { true }.map { it }.filter { true }.map { it }
.toList()
private fun seqFilterMap8(list: List<Int>) = list
.asSequence()
.filter { true }.map { it }.filter { true }.map { it }
.filter { true }.map { it }.filter { true }.map { it }
.toList()
private fun seqFilterMap16(list: List<Int>) = list
.asSequence()
.filter { true }.map { it }.filter { true }.map { it }
.filter { true }.map { it }.filter { true }.map { it }
.filter { true }.map { it }.filter { true }.map { it }
.filter { true }.map { it }.filter { true }.map { it }
.toList()
private fun seqFilterMap2slow(list: List<Int>) = list
.asSequence()
.filter { true }.map { Thread.sleep(0, 5000); it }
.toList()
private fun seqMapFirst(list: List<Int>) = list
.asSequence()
.map { Thread.sleep(0, 5000); it }.first { it > 2 }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment