From 9c512c4a82a7920cda404e7be08328036b31a08d Mon Sep 17 00:00:00 2001 From: Fabio Silva Date: Thu, 19 Dec 2019 07:28:51 -0300 Subject: [PATCH] Josh Cummings suggestions: JMH documentation states that benchmark methods should return a value in order to defend against Dead Code Elimination --- .../PatternPerformanceComparison.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/core-java-modules/core-java-text/src/main/java/com/baeldung/patternreuse/PatternPerformanceComparison.java b/core-java-modules/core-java-text/src/main/java/com/baeldung/patternreuse/PatternPerformanceComparison.java index 01a6121ad0..01f8df9ec6 100644 --- a/core-java-modules/core-java-text/src/main/java/com/baeldung/patternreuse/PatternPerformanceComparison.java +++ b/core-java-modules/core-java-text/src/main/java/com/baeldung/patternreuse/PatternPerformanceComparison.java @@ -1,6 +1,7 @@ package com.baeldung.patternreuse; import org.openjdk.jmh.annotations.*; +import org.openjdk.jmh.infra.Blackhole; import org.openjdk.jmh.runner.RunnerException; import java.io.IOException; @@ -29,52 +30,52 @@ public class PatternPerformanceComparison { } @Benchmark - public void matcherFromPreCompiledPatternResetMatches() { + public void matcherFromPreCompiledPatternResetMatches(Blackhole bh) { //With pre-compiled pattern and reusing the matcher // 1 Pattern object created // 1 Matcher objects created for (String value : values) { - matcherFromPreCompiledPattern.reset(value).matches(); + bh.consume(matcherFromPreCompiledPattern.reset(value).matches()); } } @Benchmark - public void preCompiledPatternMatcherMatches() { + public void preCompiledPatternMatcherMatches(Blackhole bh) { // With pre-compiled pattern // 1 Pattern object created // 5_000_000 Matcher objects created for (String value : values) { - preCompiledPattern.matcher(value).matches(); + bh.consume(preCompiledPattern.matcher(value).matches()); } } @Benchmark - public void patternCompileMatcherMatches() { + public void patternCompileMatcherMatches(Blackhole bh) { // Above approach "Pattern.matches(PATTERN, value)" makes this internally // 5_000_000 Pattern objects created // 5_000_000 Matcher objects created for (String value : values) { - Pattern.compile(PATTERN).matcher(value).matches(); + bh.consume(Pattern.compile(PATTERN).matcher(value).matches()); } } @Benchmark - public void patternMatches() { + public void patternMatches(Blackhole bh) { // Above approach "value.matches(PATTERN)" makes this internally // 5_000_000 Pattern objects created // 5_000_000 Matcher objects created for (String value : values) { - Pattern.matches(PATTERN, value); + bh.consume(Pattern.matches(PATTERN, value)); } } @Benchmark - public void stringMatchs() { + public void stringMatchs(Blackhole bh) { // 5_000_000 Pattern objects created // 5_000_000 Matcher objects created Instant start = Instant.now(); for (String value : values) { - value.matches(PATTERN); + bh.consume(value.matches(PATTERN)); } }