Skip to content

Instantly share code, notes, and snippets.

@jbrisbin
Forked from shipilev/IterationBenchmark.java
Last active August 29, 2015 13:57
Show Gist options
  • Save jbrisbin/9356909 to your computer and use it in GitHub Desktop.
Save jbrisbin/9356909 to your computer and use it in GitHub Desktop.
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]); }
}
}
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