官术网_书友最值得收藏!

Constant folding

Constant folding is the flip side of the DCE. If your calculation is based on constants and the result is often exactly the same, the JVM will detect this and replace the calculation with the result. To make sure this doesn't happen, we can move the computation outside the internal JMH loop. Constant folding can be prevented by always reading the inputs from non-final instance fields of a state object. In this case, the result will be based on fields of the state object:

@Benchmark
public int testMethod() {
int a = 3;
int b = 4;
return a + b;
}

So, in the preceding code, the JVM can detect that the result value is based on two constants, a and b, and can replace our code with this:

public class MyBenchmark {
    @Benchmark
    public int testMethod() {
        int c = 3;
        return c;
    }
}

Or it can just return 3 or replace the invocation of this method with 3. To solve this problem, you should rewrite the code as follows:

public class MyBenchmark {

@State(Scope.Thread)
public static class MyState {
int a = 3;
int b = 4;
}

@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public int testMethod(MyState state) {
return state.a + state.b;
}

}
主站蜘蛛池模板: 甘谷县| 绥中县| 临沧市| 阜宁县| 淮滨县| 景洪市| 克拉玛依市| 林芝县| 友谊县| 固安县| 海兴县| 西藏| 墨江| 麦盖提县| 元阳县| 灵川县| 岑溪市| 黑龙江省| 化德县| 财经| 噶尔县| 济宁市| 大邑县| 台中市| 胶州市| 天镇县| 三亚市| 珲春市| 藁城市| 双流县| 连南| 盐城市| 榕江县| 含山县| 西昌市| 抚宁县| 张家港市| 新邵县| 囊谦县| 随州市| 丹凤县|