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 {