-
-
Save jbrisbin/9356909 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package org.sample; | |
import org.openjdk.jmh.annotations.*; | |
import org.openjdk.jmh.logic.BlackHole; | |
import java.util.LinkedList; | |
import java.util.List; | |
import java.util.concurrent.TimeUnit; | |
@Measurement(iterations = 5) | |
@Warmup(iterations = 5) | |
@Fork(3) | |
@BenchmarkMode(Mode.AverageTime) | |
@OutputTimeUnit(TimeUnit.NANOSECONDS) | |
@State(Scope.Thread) | |
public class OptimizedForLoopBenchmarks { | |
@Param({"1000", "10000", "100000", "1000000"}) | |
public int length; | |
private List<Integer> list; | |
private int[] array; | |
@Setup | |
public void setup() { | |
list = new LinkedList<>(); | |
array = new int[length]; | |
for(int c = 0; c < length; c++) { | |
int i = 10000 + c; | |
list.add(i); | |
array[c] = i; | |
} | |
} | |
@GenerateMicroBenchmark | |
public void forLoopWithoutSideEffect() { | |
for(Integer i : list) {} | |
} | |
@GenerateMicroBenchmark | |
public void forLoopWithSideEffect(BlackHole bh) { | |
for(Integer i : list) { bh.consume(i); } | |
} | |
@GenerateMicroBenchmark | |
public void arrayForLoopWithoutSideEffect() { | |
for(int i = 0; i < length; i++) {} | |
} | |
@GenerateMicroBenchmark | |
public void arrayForLoopWithAssignment() { | |
for(int i = 0; i < length; i++) { | |
Object o = array[i]; | |
} | |
} | |
@GenerateMicroBenchmark | |
public void arrayForLoopWithSideEffect(BlackHole bh) { | |
for(int i = 0; i < length; i++) { bh.consume(array[i]); } | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Mac OS X 10.8, JDK 1.7.0_21-b12 | |
Benchmark (length) Mode Samples Mean Mean error Units | |
o.p.b.r.OptimizedForLoopBenchmarks.arrayForLoopWithAssignment 1000000 avgt 5 1128262.337 33368.956 ns/op | |
o.p.b.r.OptimizedForLoopBenchmarks.arrayForLoopWithAssignment 100000 avgt 5 112173.533 4046.902 ns/op | |
o.p.b.r.OptimizedForLoopBenchmarks.arrayForLoopWithAssignment 10000 avgt 5 13986.968 93.538 ns/op | |
o.p.b.r.OptimizedForLoopBenchmarks.arrayForLoopWithAssignment 1000 avgt 5 1403.978 1.508 ns/op | |
o.p.b.r.OptimizedForLoopBenchmarks.arrayForLoopWithSideEffect 1000000 avgt 5 1064127.764 28925.262 ns/op | |
o.p.b.r.OptimizedForLoopBenchmarks.arrayForLoopWithSideEffect 100000 avgt 5 103840.942 1244.817 ns/op | |
o.p.b.r.OptimizedForLoopBenchmarks.arrayForLoopWithSideEffect 10000 avgt 5 11209.971 86.001 ns/op | |
o.p.b.r.OptimizedForLoopBenchmarks.arrayForLoopWithSideEffect 1000 avgt 5 1140.299 17.599 ns/op | |
o.p.b.r.OptimizedForLoopBenchmarks.arrayForLoopWithoutSideEffect 1000000 avgt 5 0.335 0.481 ns/op | |
o.p.b.r.OptimizedForLoopBenchmarks.arrayForLoopWithoutSideEffect 100000 avgt 5 0.335 0.478 ns/op | |
o.p.b.r.OptimizedForLoopBenchmarks.arrayForLoopWithoutSideEffect 10000 avgt 5 0.337 0.484 ns/op | |
o.p.b.r.OptimizedForLoopBenchmarks.arrayForLoopWithoutSideEffect 1000 avgt 5 0.335 0.478 ns/op | |
o.p.b.r.OptimizedForLoopBenchmarks.forLoopWithSideEffect 1000000 avgt 5 5908654.747 146634.446 ns/op | |
o.p.b.r.OptimizedForLoopBenchmarks.forLoopWithSideEffect 100000 avgt 5 320832.137 15636.930 ns/op | |
o.p.b.r.OptimizedForLoopBenchmarks.forLoopWithSideEffect 10000 avgt 5 30878.899 2547.645 ns/op | |
o.p.b.r.OptimizedForLoopBenchmarks.forLoopWithSideEffect 1000 avgt 5 3323.904 789.063 ns/op | |
o.p.b.r.OptimizedForLoopBenchmarks.forLoopWithoutSideEffect 1000000 avgt 5 5327773.313 109109.714 ns/op | |
o.p.b.r.OptimizedForLoopBenchmarks.forLoopWithoutSideEffect 100000 avgt 5 289448.064 23716.044 ns/op | |
o.p.b.r.OptimizedForLoopBenchmarks.forLoopWithoutSideEffect 10000 avgt 5 27505.351 1082.344 ns/op | |
o.p.b.r.OptimizedForLoopBenchmarks.forLoopWithoutSideEffect 1000 avgt 5 2667.670 93.183 ns/op |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment