Skip to content

Instantly share code, notes, and snippets.

@soc
Created February 20, 2015 00:03
Show Gist options
  • Select an option

  • Save soc/51a8f0fd01d676b4799c to your computer and use it in GitHub Desktop.

Select an option

Save soc/51a8f0fd01d676b4799c to your computer and use it in GitHub Desktop.
package bench
import org.openjdk.jmh.annotations._
import org.openjdk.jmh.infra.Blackhole
import java.util.concurrent.TimeUnit;
@State(Scope.Thread)
class ArrayOpBench {
val arrays: Array[Array[_]] =
Array(
Array(1), Array(1L), Array("a"), Array(1.0), Array(1F), Array('a'), Array(1.toByte), Array(1.toShort), Array(()), Array(null),
Array(2), Array(2L), Array("b"), Array(2.0), Array(2F), Array('b'), Array(2.toByte), Array(2.toShort), Array(()), Array(null),
Array(3), Array(3L), Array("c"), Array(3.0), Array(3F), Array('c'), Array(3.toByte), Array(3.toShort), Array(()), Array(null),
Array(4), Array(4L), Array("d"), Array(4.0), Array(4F), Array('d'), Array(4.toByte), Array(4.toShort), Array(()), Array(null),
Array(5), Array(5L), Array("e"), Array(5.0), Array(5F), Array('e'), Array(5.toByte), Array(5.toShort), Array(()), Array(null),
Array(6), Array(6L), Array("f"), Array(6.0), Array(6F), Array('f'), Array(6.toByte), Array(6.toShort), Array(()), Array(null),
Array(7), Array(7L), Array("g"), Array(7.0), Array(7F), Array('g'), Array(7.toByte), Array(7.toShort), Array(()), Array(null),
Array(8), Array(8L), Array("h"), Array(8.0), Array(8F), Array('h'), Array(8.toByte), Array(8.toShort), Array(()), Array(null),
Array(9), Array(9L), Array("i"), Array(9.0), Array(9F), Array('i'), Array(9.toByte), Array(9.toShort), Array(()), Array(null),
Array(10), Array(10L), Array("j"), Array(10.0), Array(10F), Array('j'), Array(10.toByte), Array(10.toShort), Array(()), Array(null),
Array(1), Array(1L), Array("a"), Array(1.0), Array(1F), Array('a'), Array(1.toByte), Array(1.toShort), Array(()), Array(null),
Array(2), Array(2L), Array("b"), Array(2.0), Array(2F), Array('b'), Array(2.toByte), Array(2.toShort), Array(()), Array(null),
Array(3), Array(3L), Array("c"), Array(3.0), Array(3F), Array('c'), Array(3.toByte), Array(3.toShort), Array(()), Array(null),
Array(4), Array(4L), Array("d"), Array(4.0), Array(4F), Array('d'), Array(4.toByte), Array(4.toShort), Array(()), Array(null),
Array(5), Array(5L), Array("e"), Array(5.0), Array(5F), Array('e'), Array(5.toByte), Array(5.toShort), Array(()), Array(null),
Array(6), Array(6L), Array("f"), Array(6.0), Array(6F), Array('f'), Array(6.toByte), Array(6.toShort), Array(()), Array(null),
Array(7), Array(7L), Array("g"), Array(7.0), Array(7F), Array('g'), Array(7.toByte), Array(7.toShort), Array(()), Array(null),
Array(8), Array(8L), Array("h"), Array(8.0), Array(8F), Array('h'), Array(8.toByte), Array(8.toShort), Array(()), Array(null),
Array(9), Array(9L), Array("i"), Array(9.0), Array(9F), Array('i'), Array(9.toByte), Array(9.toShort), Array(()), Array(null),
Array(10), Array(10L), Array("j"), Array(10.0), Array(10F), Array('j'), Array(10.toByte), Array(10.toShort), Array(()), Array(null),
Array(1), Array(1L), Array("a"), Array(1.0), Array(1F), Array('a'), Array(1.toByte), Array(1.toShort), Array(()), Array(null),
Array(2), Array(2L), Array("b"), Array(2.0), Array(2F), Array('b'), Array(2.toByte), Array(2.toShort), Array(()), Array(null),
Array(3), Array(3L), Array("c"), Array(3.0), Array(3F), Array('c'), Array(3.toByte), Array(3.toShort), Array(()), Array(null),
Array(4), Array(4L), Array("d"), Array(4.0), Array(4F), Array('d'), Array(4.toByte), Array(4.toShort), Array(()), Array(null),
Array(5), Array(5L), Array("e"), Array(5.0), Array(5F), Array('e'), Array(5.toByte), Array(5.toShort), Array(()), Array(null),
Array(6), Array(6L), Array("f"), Array(6.0), Array(6F), Array('f'), Array(6.toByte), Array(6.toShort), Array(()), Array(null),
Array(7), Array(7L), Array("g"), Array(7.0), Array(7F), Array('g'), Array(7.toByte), Array(7.toShort), Array(()), Array(null),
Array(8), Array(8L), Array("h"), Array(8.0), Array(8F), Array('h'), Array(8.toByte), Array(8.toShort), Array(()), Array(null),
Array(9), Array(9L), Array("i"), Array(9.0), Array(9F), Array('i'), Array(9.toByte), Array(9.toShort), Array(()), Array(null),
Array(10), Array(10L), Array("j"), Array(10.0), Array(10F), Array('j'), Array(10.toByte), Array(10.toShort), Array(()), Array(null),
Array(1), Array(1L), Array("a"), Array(1.0), Array(1F), Array('a'), Array(1.toByte), Array(1.toShort), Array(()), Array(null),
Array(2), Array(2L), Array("b"), Array(2.0), Array(2F), Array('b'), Array(2.toByte), Array(2.toShort), Array(()), Array(null),
Array(3), Array(3L), Array("c"), Array(3.0), Array(3F), Array('c'), Array(3.toByte), Array(3.toShort), Array(()), Array(null),
Array(4), Array(4L), Array("d"), Array(4.0), Array(4F), Array('d'), Array(4.toByte), Array(4.toShort), Array(()), Array(null),
Array(5), Array(5L), Array("e"), Array(5.0), Array(5F), Array('e'), Array(5.toByte), Array(5.toShort), Array(()), Array(null),
Array(6), Array(6L), Array("f"), Array(6.0), Array(6F), Array('f'), Array(6.toByte), Array(6.toShort), Array(()), Array(null),
Array(7), Array(7L), Array("g"), Array(7.0), Array(7F), Array('g'), Array(7.toByte), Array(7.toShort), Array(()), Array(null),
Array(8), Array(8L), Array("h"), Array(8.0), Array(8F), Array('h'), Array(8.toByte), Array(8.toShort), Array(()), Array(null),
Array(9), Array(9L), Array("i"), Array(9.0), Array(9F), Array('i'), Array(9.toByte), Array(9.toShort), Array(()), Array(null),
Array(10), Array(10L), Array("j"), Array(10.0), Array(10F), Array('j'), Array(10.toByte), Array(10.toShort), Array(()), Array(null),
Array(1), Array(1L), Array("a"), Array(1.0), Array(1F), Array('a'), Array(1.toByte), Array(1.toShort), Array(()), Array(null),
Array(2), Array(2L), Array("b"), Array(2.0), Array(2F), Array('b'), Array(2.toByte), Array(2.toShort), Array(()), Array(null),
Array(3), Array(3L), Array("c"), Array(3.0), Array(3F), Array('c'), Array(3.toByte), Array(3.toShort), Array(()), Array(null),
Array(4), Array(4L), Array("d"), Array(4.0), Array(4F), Array('d'), Array(4.toByte), Array(4.toShort), Array(()), Array(null),
Array(5), Array(5L), Array("e"), Array(5.0), Array(5F), Array('e'), Array(5.toByte), Array(5.toShort), Array(()), Array(null),
Array(6), Array(6L), Array("f"), Array(6.0), Array(6F), Array('f'), Array(6.toByte), Array(6.toShort), Array(()), Array(null),
Array(7), Array(7L), Array("g"), Array(7.0), Array(7F), Array('g'), Array(7.toByte), Array(7.toShort), Array(()), Array(null),
Array(8), Array(8L), Array("h"), Array(8.0), Array(8F), Array('h'), Array(8.toByte), Array(8.toShort), Array(()), Array(null),
Array(9), Array(9L), Array("i"), Array(9.0), Array(9F), Array('i'), Array(9.toByte), Array(9.toShort), Array(()), Array(null),
Array(10), Array(10L), Array("j"), Array(10.0), Array(10F), Array('j'), Array(10.toByte), Array(10.toShort), Array(()), Array(null),
Array(null))
var i = 0
@Benchmark
@BenchmarkMode(Array(Mode.AverageTime))
@OutputTimeUnit(TimeUnit.MICROSECONDS)
def scalaArrayLength(bh: Blackhole): Unit = {
val len = arrays(i).length
i = (i + 1) % 500
bh.consume(len)
}
@Benchmark
@BenchmarkMode(Array(Mode.AverageTime))
@OutputTimeUnit(TimeUnit.MICROSECONDS)
def javaArrayLength(bh: Blackhole): Unit = {
val len = java.lang.reflect.Array.getLength(arrays(i))
i = (i + 1) % 500
bh.consume(len)
}
@Benchmark
@BenchmarkMode(Array(Mode.AverageTime))
@OutputTimeUnit(TimeUnit.MICROSECONDS)
def scalaArrayApply(bh: Blackhole): Unit = {
val len = arrays(i).apply(0)
i = (i + 1) % 500
bh.consume(len)
}
@Benchmark
@BenchmarkMode(Array(Mode.AverageTime))
@OutputTimeUnit(TimeUnit.MICROSECONDS)
def javaArrayApply(bh: Blackhole): Unit = {
val value = java.lang.reflect.Array.get(arrays(i), 0)
i = (i + 1) % 500
bh.consume(value)
}
}
/*
[info] Benchmark Mode Cnt Score Error Units
[info] ArrayOpBench.javaArrayApply avgt 10 0,071 ± 0,004 us/op
[info] ArrayOpBench.javaArrayLength avgt 10 0,006 ± 0,000 us/op
[info] ArrayOpBench.scalaArrayApply avgt 10 0,008 ± 0,001 us/op
[info] ArrayOpBench.scalaArrayLength avgt 10 0,006 ± 0,000 us/op
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment