Created
February 16, 2020 22:42
-
-
Save gusakovgiorgi/8c8890e0c7ce20ec2492e9cc15ffe2c5 to your computer and use it in GitHub Desktop.
Java class for benchmarking instanceof, add and equals operators
This file contains 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
import org.openjdk.jmh.annotations.*; | |
import org.openjdk.jmh.infra.Blackhole; | |
import java.util.concurrent.TimeUnit; | |
public class CompareOperatorsBenchMark { | |
// Нужано, для того, что бы не передавать константы напрямую в измеряемый код, т.к. Java может их оптимизировать | |
@State(Scope.Thread) | |
public static class MyIntState { | |
public int a = 1; | |
public int b = 2; | |
} | |
// Нужано, для того, что бы не передавать константы напрямую в измеряемый код, т.к. Java может их оптимизировать | |
@State(Scope.Thread) | |
public static class MyDoubleState { | |
public double a = 1; | |
public double b = 2; | |
} | |
// Нужано, для того, что бы не передавать константы напрямую в измеряемый код, т.к. Java может их оптимизировать | |
@State(Scope.Thread) | |
public static class MyStringState { | |
public String a = "first"; | |
public String b = "second"; | |
public Object ob = new Integer(1); | |
} | |
// BlackHole нужен что бы куда-то передавать результат иначе джава может просто сделать метод пустым(оптиизировать). | |
// В принципе можно посто возвращать результат с метода, но автору очень нравитсья название класса Blackhole | |
@Benchmark | |
@BenchmarkMode(Mode.AverageTime) | |
@OutputTimeUnit(TimeUnit.NANOSECONDS) | |
public void add(MyIntState myIntState, Blackhole blackhole) { | |
int result = myIntState.a + myIntState.b; | |
blackhole.consume(result); | |
} | |
// BlackHole нужен что бы куда-то передавать результат иначе джава может просто сделать метод пустым(оптиизировать). | |
// В принципе можно посто возвращать результат с метода, но автору очень нравитсья название класса Blackhole | |
@Benchmark | |
@BenchmarkMode(Mode.AverageTime) | |
@OutputTimeUnit(TimeUnit.NANOSECONDS) | |
public void instanceOf(MyStringState myStringState, Blackhole blackhole) { | |
boolean res = myStringState.ob instanceof String; | |
blackhole.consume(res); | |
} | |
// BlackHole нужен что бы куда-то передавать результат иначе джава может просто сделать метод пустым(оптиизировать). | |
// В принципе можно посто возвращать результат с метода, но автору очень нравитсья название класса Blackhole | |
@Benchmark | |
@BenchmarkMode(Mode.AverageTime) | |
@OutputTimeUnit(TimeUnit.NANOSECONDS) | |
public void notEqualsWithDouble(MyDoubleState myDoubleState, Blackhole blackhole) { | |
boolean res = myDoubleState.a != myDoubleState.b; | |
blackhole.consume(res); | |
} | |
// BlackHole нужен что бы куда-то передавать результат иначе джава может просто сделать метод пустым(оптиизировать). | |
// В принципе можно посто возвращать результат с метода, но автору очень нравитсья название класса Blackhole | |
@Benchmark | |
@BenchmarkMode(Mode.AverageTime) | |
@OutputTimeUnit(TimeUnit.NANOSECONDS) | |
public void notEqualsWithInt(MyIntState myIntState, Blackhole blackhole) { | |
boolean res = myIntState.a != myIntState.b; | |
blackhole.consume(res); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment