From 17fb67b7ad9aad9efba22e15a150e5ead0a8c7e0 Mon Sep 17 00:00:00 2001 From: Shautvast Date: Mon, 28 Aug 2023 23:01:46 +0200 Subject: [PATCH] v2 blackholes, java8 --- log | 10 ++-- pom.xml | 10 ++-- report.md | 45 ++++++++++++++ .../benchmarks/loops/LoopBenchmark.java | 59 +++++++++++-------- 4 files changed, 88 insertions(+), 36 deletions(-) create mode 100644 report.md diff --git a/log b/log index 8f315c9..712028f 100644 --- a/log +++ b/log @@ -569,11 +569,11 @@ c2, level 4, com.github.shautvast.benchmarks.loops.jmh_generated.LoopBenchmark_e ; - com.github.shautvast.benchmarks.loops.LoopBenchmark::enhancedForLoop@38 (line 53) ; - com.github.shautvast.benchmarks.loops.jmh_generated.LoopBenchmark_enhancedForLoop_jmhTest::enhancedForLoop_avgt_jmhStub@19 (line 193) 1,81% 0x0000000113e5a784: 210c 40b9 - 17,19% 0x0000000113e5a788: ;*getfield coder {reexecute=0 rethrow=0 return_oop=0} - ; - java.lang.String::coder@7 (line 4556) - ; - java.lang.String::length@6 (line 1499) - ; - com.github.shautvast.benchmarks.loops.LoopBenchmark::enhancedForLoop@38 (line 53) - ; - com.github.shautvast.benchmarks.loops.jmh_generated.LoopBenchmark_enhancedForLoop_jmhTest::enhancedForLoop_avgt_jmhStub@19 (line 193) + 17,19% 0x0000000113e5a788: ;*getfield coder {reexecute=0 rethrow=0 return_oop=0} + ; - java.lang.String::coder@7 (line 4556) + ; - java.lang.String::length@6 (line 1499) + ; - com.github.shautvast.benchmarks.loops.LoopBenchmark::enhancedForLoop@38 (line 53) + ; - com.github.shautvast.benchmarks.loops.jmh_generated.LoopBenchmark_enhancedForLoop_jmhTest::enhancedForLoop_avgt_jmhStub@19 (line 193) 17,19% 0x0000000113e5a788: 8642 c039 | 2128 c61a 0,01% 0x0000000113e5a790: ;*iadd {reexecute=0 rethrow=0 return_oop=0} ; - java.util.ArrayList$Itr::next@53 (line 974) diff --git a/pom.xml b/pom.xml index 2af576d..8ce3bf3 100644 --- a/pom.xml +++ b/pom.xml @@ -9,8 +9,8 @@ 1.0-SNAPSHOT - 20 - 20 + 8 + 8 UTF-8 @@ -41,9 +41,9 @@ maven-compiler-plugin 3.8.0 - 9 - 9 - 9 + 8 + 8 + 8 diff --git a/report.md b/report.md new file mode 100644 index 0000000..de5c63d --- /dev/null +++ b/report.md @@ -0,0 +1,45 @@ +**cStyle** +``` +23,57% 0x0000000112765de8: ;*aaload {reexecute=0 rethrow=0 return_oop=0} +; - java.util.ArrayList::elementData@5 (line 411) +; - java.util.ArrayList::get@11 (line 428) +; - com.github.shautvast.benchmarks.loops.LoopBenchmark::cStyle@20 (line 35) +; - com.github.shautvast.benchmarks.loops.jmh_generated.LoopBenchmark_cStyle_jmhTest::cStyle_avgt_jmhStub@19 (line 193) + +30,39% 0x0000000112765e00: ;*getfield coder {reexecute=0 rethrow=0 return_oop=0} +; - java.lang.String::coder@7 (line 4556) +; - java.lang.String::length@6 (line 1499) +; - com.github.shautvast.benchmarks.loops.LoopBenchmark::cStyle@28 (line 35) +; - com.github.shautvast.benchmarks.loops.jmh_generated.LoopBenchmark_cStyle_jmhTest::cStyle_avgt_jmhStub@19 (line 193) + +27,83% 0x0000000112765e28: ;*getfield coder {reexecute=0 rethrow=0 return_oop=0} +; - java.lang.String::coder@7 (line 4556) +; - java.lang.String::length@6 (line 1499) +; - com.github.shautvast.benchmarks.loops.LoopBenchmark::cStyle@28 (line 35) +; - com.github.shautvast.benchmarks.loops.jmh_generated.LoopBenchmark_cStyle_jmhTest::cStyle_avgt_jmhStub@19 (line 193) + +5,18% 0x0000000112765e3c: ;*if_icmpge {reexecute=0 rethrow=0 return_oop=0} +; - com.github.shautvast.benchmarks.loops.LoopBenchmark::cStyle@10 (line 34) +; - com.github.shautvast.benchmarks.loops.jmh_generated.LoopBenchmark_cStyle_jmhTest::cStyle_avgt_jmhStub@19 (line 193) +``` + +**enhancedForLoop** +``` +29,09% 0x0000000113e5a748: ;*aaload {reexecute=0 rethrow=0 return_oop=0} +; - java.util.ArrayList$Itr::next@64 (line 975) +; - com.github.shautvast.benchmarks.loops.LoopBenchmark::enhancedForLoop@25 (line 52) +; - com.github.shautvast.benchmarks.loops.jmh_generated.LoopBenchmark_enhancedForLoop_jmhTest::enhancedForLoop_avgt_jmhStub@19 (line 193) + +23,18% 0x0000000113e5a760: ;*getfield coder {reexecute=0 rethrow=0 return_oop=0} +; - java.lang.String::coder@7 (line 4556) +; - java.lang.String::length@6 (line 1499) +; - com.github.shautvast.benchmarks.loops.LoopBenchmark::enhancedForLoop@38 (line 53) +; - com.github.shautvast.benchmarks.loops.jmh_generated.LoopBenchmark_enhancedForLoop_jmhTest::enhancedForLoop_avgt_jmhStub@19 (line 193) + +17,19% 0x0000000113e5a788: ;*getfield coder {reexecute=0 rethrow=0 return_oop=0} +; - java.lang.String::coder@7 (line 4556) +; - java.lang.String::length@6 (line 1499) +; - com.github.shautvast.benchmarks.loops.LoopBenchmark::enhancedForLoop@38 (line 53) +; - com.github.shautvast.benchmarks.loops.jmh_generated.LoopBenchmark_enhancedForLoop_jmhTest::enhancedForLoop_avgt_jmhStub@19 (line 193) +``` + diff --git a/src/main/java/com/github/shautvast/benchmarks/loops/LoopBenchmark.java b/src/main/java/com/github/shautvast/benchmarks/loops/LoopBenchmark.java index 014c03e..1071e03 100644 --- a/src/main/java/com/github/shautvast/benchmarks/loops/LoopBenchmark.java +++ b/src/main/java/com/github/shautvast/benchmarks/loops/LoopBenchmark.java @@ -1,6 +1,7 @@ package com.github.shautvast.benchmarks.loops; import org.openjdk.jmh.annotations.*; +import org.openjdk.jmh.infra.Blackhole; import org.openjdk.jmh.profile.*; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.RunnerException; @@ -13,51 +14,57 @@ import java.util.concurrent.TimeUnit; @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.NANOSECONDS) @Fork(value = 1) +@State(Scope.Thread) public class LoopBenchmark { - @org.openjdk.jmh.annotations.State(Scope.Thread) - public static class State { - final static int LIST_SIZE = 1000; - List list = new ArrayList<>(LIST_SIZE); + final static int LIST_SIZE = 1000; + List list = new ArrayList<>(LIST_SIZE); - @Setup(Level.Iteration) - public void doSetup() { - for (int i = 0; i < LIST_SIZE; i++) { - list.add(UUID.randomUUID().toString()); - } + @Setup(Level.Iteration) + public void doSetup() { + for (int i = 0; i < LIST_SIZE; i++) { + list.add(UUID.randomUUID().toString()); } } @Benchmark - public long cStyle(LoopBenchmark.State state) { - long totalLength = 0; - for (int i = 0; i < State.LIST_SIZE; i++) { - totalLength += state.list.get(i).length(); + public void forLoop(Blackhole bh) { + for (int i = 0; i < LIST_SIZE; i++) { + bh.consume(list.get(i)); } - return totalLength; } @Benchmark - public long iterator(LoopBenchmark.State state) { - long totalLength = 0; - for (Iterator iterator = state.list.iterator(); iterator.hasNext(); ) { - totalLength += iterator.next().length(); + public void whileLoop(Blackhole bh) { + int i = 0; + while (i < LIST_SIZE) { + bh.consume(list.get(i)); + i++; } - return totalLength; } @Benchmark - public long enhancedForLoop(LoopBenchmark.State state) { - long totalLength = 0; - for (String element : state.list) { - totalLength += element.length(); + public void iterator(Blackhole bh) { + for (Iterator iterator = list.iterator(); iterator.hasNext(); ) { + bh.consume(iterator.next()); } - return totalLength; } @Benchmark - public long stream(LoopBenchmark.State state) { - return state.list.stream().mapToLong(String::length).sum(); + public void enhancedForLoop(Blackhole bh) { + for (String element : list) { + bh.consume(element.length()); + } + } + + @Benchmark + public void stream(Blackhole bh) { + list.stream().forEach(bh::consume); + } + + @Benchmark + public void forEach(Blackhole bh) { + list.forEach(bh::consume); } public static void main(String[] args) throws RunnerException {