JMH Micro Benchmark Annotations with Scala
JMH Micro Benchmark Annotations with Scala
我是JMH的新手。在 运行 修改我的代码并使用不同的注释后,我真的不明白它是如何工作的。
我使用 iteration = 1, warmup = 1, fork =1 来查看我的代码将被执行一次,但事实并非如此。 JMH 运行 我的代码超过10万次了,我也不知道为什么。那么,我怎样才能控制我的代码调用的次数呢?
这是我的代码:(我为测试修复了 JMHSample_01)
package org.openjdk.jmh.samples
import java.util.concurrent.TimeUnit
import org.openjdk.jmh.annotations._
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@BenchmarkMode(Array(Mode.AverageTime))
@State(Scope.Thread)
@Warmup(iterations = 1, time = 1)
@Measurement(iterations = 1, time = 1)
@Fork(1)
class JMHSample_01_HelloWorld {
@Benchmark
def wellHelloThere(): Unit = {
// this method was intentionally left blank.
val a:Int = 1
val b:Int = 2
val c:Int = a + b
println("this is c " + c)
}
}
这就是 JMH 的工作原理:它会执行您的代码十几次,以找出平均执行时间。在 Java JIT 编译器优化代码之前,Java 程序需要 运行 多次。基准测试让 JIT 编译器认为基准测试方法很重要,以便正确优化它。
你的基准有很多问题:它是确定性的,其中 1 + 2
总是 3
如果这是你想要衡量的:它只会用最终结果替换计算。
请look at the JMH samples学习如何正确使用JMH。在这种情况下,您的基准测试是用 Scala 编写的,因为它编译为 Java 字节代码并没有太大作用。
我是JMH的新手。在 运行 修改我的代码并使用不同的注释后,我真的不明白它是如何工作的。 我使用 iteration = 1, warmup = 1, fork =1 来查看我的代码将被执行一次,但事实并非如此。 JMH 运行 我的代码超过10万次了,我也不知道为什么。那么,我怎样才能控制我的代码调用的次数呢? 这是我的代码:(我为测试修复了 JMHSample_01)
package org.openjdk.jmh.samples
import java.util.concurrent.TimeUnit
import org.openjdk.jmh.annotations._
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@BenchmarkMode(Array(Mode.AverageTime))
@State(Scope.Thread)
@Warmup(iterations = 1, time = 1)
@Measurement(iterations = 1, time = 1)
@Fork(1)
class JMHSample_01_HelloWorld {
@Benchmark
def wellHelloThere(): Unit = {
// this method was intentionally left blank.
val a:Int = 1
val b:Int = 2
val c:Int = a + b
println("this is c " + c)
}
}
这就是 JMH 的工作原理:它会执行您的代码十几次,以找出平均执行时间。在 Java JIT 编译器优化代码之前,Java 程序需要 运行 多次。基准测试让 JIT 编译器认为基准测试方法很重要,以便正确优化它。
你的基准有很多问题:它是确定性的,其中 1 + 2
总是 3
如果这是你想要衡量的:它只会用最终结果替换计算。
请look at the JMH samples学习如何正确使用JMH。在这种情况下,您的基准测试是用 Scala 编写的,因为它编译为 Java 字节代码并没有太大作用。