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

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;
}

}
主站蜘蛛池模板: 鹤山市| 桓台县| 左云县| 井冈山市| 石狮市| 寻乌县| 广安市| 佛山市| 内乡县| 岑巩县| 威信县| 会宁县| 禄劝| 涞水县| 周至县| 汶川县| 惠来县| 宁化县| 鄂温| 吉安市| 犍为县| 巴林右旗| 平武县| 澎湖县| 渝中区| 藁城市| 宕昌县| 昌平区| 宣武区| 洛南县| 罗平县| 商丘市| 桃江县| 连江县| 肇东市| 天峻县| 日喀则市| 舞钢市| 黄浦区| 永胜县| 城固县|