Created
February 20, 2015 00:03
-
-
Save soc/51a8f0fd01d676b4799c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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