Skip to content

Instantly share code, notes, and snippets.

@chemicL
Created January 16, 2023 11:29
Show Gist options
  • Save chemicL/67b4f87a58950ae6e5d4dbcd4d2564b7 to your computer and use it in GitHub Desktop.
Save chemicL/67b4f87a58950ae6e5d4dbcd4d2564b7 to your computer and use it in GitHub Desktop.
Benchmark of Mono::singleOptional vs map + defaultIfEmpty
@BenchmarkMode({Mode.AverageTime})
@Warmup(iterations = 5, time = 5, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 5, time = 5, timeUnit = TimeUnit.SECONDS)
@Fork(value = 1)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@State(Scope.Benchmark)
public class MonoOptionalBenchmark {
private static final Throwable EXCEPTION = new RuntimeException() {
@Override
public synchronized Throwable fillInStackTrace() {
return this;
}
};
@Benchmark
public void singleOptionalBaseline(Blackhole blackhole) {
blackhole.consume(
Mono.just(1)
.map(Optional::ofNullable)
.defaultIfEmpty(Optional.empty())
.block()
);
}
@Benchmark
public void singleOptionalEmptyBaseline(Blackhole blackhole) {
blackhole.consume(
Mono.empty()
.map(Optional::ofNullable)
.defaultIfEmpty(Optional.empty())
.block()
);
}
@Benchmark
public void singleOptionalErrorBaseline(Blackhole blackhole) {
blackhole.consume(
Mono.error(EXCEPTION)
.map(Optional::ofNullable)
.defaultIfEmpty(Optional.empty())
.onErrorComplete()
.block()
);
}
@Benchmark
public void singleOptional(Blackhole blackhole) {
blackhole.consume(
Mono.just(1)
.singleOptional()
.block()
);
}
@Benchmark
public void singleOptionalEmpty(Blackhole blackhole) {
blackhole.consume(
Mono.empty()
.singleOptional()
.block()
);
}
@Benchmark
public void singleOptionalError(Blackhole blackhole) {
blackhole.consume(
Mono.error(EXCEPTION)
.singleOptional()
.onErrorComplete()
.block()
);
}
}
@chemicL
Copy link
Author

chemicL commented Jan 18, 2023

Benchmark                                          Mode  Cnt   Score   Error  Units
MonoOptionalBenchmark.singleOptional               avgt    5   4.284 ± 0.096  ns/op
MonoOptionalBenchmark.singleOptionalBaseline       avgt    5  38.576 ± 0.091  ns/op
MonoOptionalBenchmark.singleOptionalEmpty          avgt    5   0.591 ± 0.006  ns/op
MonoOptionalBenchmark.singleOptionalEmptyBaseline  avgt    5  32.916 ± 0.343  ns/op
MonoOptionalBenchmark.singleOptionalError          avgt    5  23.348 ± 0.165  ns/op
MonoOptionalBenchmark.singleOptionalErrorBaseline  avgt    5  59.782 ± 0.774  ns/op

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment