Skip to content

Instantly share code, notes, and snippets.

@gusakovgiorgi
Created February 16, 2020 22:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gusakovgiorgi/8c8890e0c7ce20ec2492e9cc15ffe2c5 to your computer and use it in GitHub Desktop.
Save gusakovgiorgi/8c8890e0c7ce20ec2492e9cc15ffe2c5 to your computer and use it in GitHub Desktop.
Java class for benchmarking instanceof, add and equals operators
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