Created
November 25, 2017 13:27
-
-
Save artspb/663086d1358dd5f1498b7b8285d7527b 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
@State(Scope.Thread) | |
@OutputTimeUnit(TimeUnit.MICROSECONDS) | |
public class MegamorphicList { | |
private List<String>[] strings; | |
@Setup(Level.Trial) | |
public void init() { | |
strings = new List[]{getArrayList1(6), getArrayList2(6), getArrayList3(6), getArrayList(6), getFactoryList6(), getUnModifiableList(6)}; | |
} | |
@Benchmark | |
public int sumLength_ArrayList1() { | |
List<String> list = strings[0]; | |
int blackhole = 0; | |
for (int i = 0; i < list.size(); ++i) { | |
blackhole += list.get(i).length(); | |
} | |
return blackhole; | |
} | |
@Benchmark | |
public int sumLength_ArrayList2() { | |
List<String> list = strings[1]; | |
int blackhole = 0; | |
for (int i = 0; i < list.size(); ++i) { | |
blackhole += list.get(i).length(); | |
} | |
return blackhole; | |
} | |
@Benchmark | |
public int sumLength_ArrayList3() { | |
List<String> list = strings[2]; | |
int blackhole = 0; | |
for (int i = 0; i < list.size(); ++i) { | |
blackhole += list.get(i).length(); | |
} | |
return blackhole; | |
} | |
@Benchmark | |
public int sumLength_ArrayList() { | |
List<String> list = strings[3]; | |
int blackhole = 0; | |
for (int i = 0; i < list.size(); ++i) { | |
blackhole += list.get(i).length(); | |
} | |
return blackhole; | |
} | |
@Benchmark | |
public int sumLength_Factory() { | |
List<String> list = strings[4]; | |
int blackhole = 0; | |
for (int i = 0; i < list.size(); ++i) { | |
blackhole += list.get(i).length(); | |
} | |
return blackhole; | |
} | |
@Benchmark | |
public int sumLength_Unmodifiable() { | |
List<String> list = strings[5]; | |
int blackhole = 0; | |
for (int i = 0; i < list.size(); ++i) { | |
blackhole += list.get(i).length(); | |
} | |
return blackhole; | |
} | |
@Benchmark | |
public int sumLength_Random2() { | |
List<String> list = strings[ThreadLocalRandom.current().nextInt(2)]; | |
int blackhole = 0; | |
for (int i = 0; i < list.size(); ++i) { | |
blackhole += list.get(i).length(); | |
} | |
return blackhole; | |
} | |
@Benchmark | |
public int sumLength_Random3() { | |
List<String> list = strings[ThreadLocalRandom.current().nextInt(3)]; | |
int blackhole = 0; | |
for (int i = 0; i < list.size(); ++i) { | |
blackhole += list.get(i).length(); | |
} | |
return blackhole; | |
} | |
@Benchmark | |
public int sumLength_Random4() { | |
List<String> list = strings[ThreadLocalRandom.current().nextInt(4)]; | |
int blackhole = 0; | |
for (int i = 0; i < list.size(); ++i) { | |
blackhole += list.get(i).length(); | |
} | |
return blackhole; | |
} | |
@Benchmark | |
public int sumLength_Random5() { | |
List<String> list = strings[ThreadLocalRandom.current().nextInt(5)]; | |
int blackhole = 0; | |
for (int i = 0; i < list.size(); ++i) { | |
blackhole += list.get(i).length(); | |
} | |
return blackhole; | |
} | |
@Benchmark | |
public int sumLength_Random6() { | |
List<String> list = strings[ThreadLocalRandom.current().nextInt(6)]; | |
int blackhole = 0; | |
for (int i = 0; i < list.size(); ++i) { | |
blackhole += list.get(i).length(); | |
} | |
return blackhole; | |
} | |
private List<String> getUnModifiableList(int size) { | |
return Collections.unmodifiableList(getArrayList(size)); | |
} | |
private List<String> getFactoryList6() { | |
return List.of(randomString(), | |
randomString(), | |
randomString(), | |
randomString(), | |
randomString(), | |
randomString() | |
); | |
} | |
private List<String> getArrayList(int size) { | |
List<String> list = new ArrayList<>(); | |
for (int i = 0; i < size; ++i) { | |
list.add(randomString()); | |
} | |
return list; | |
} | |
private List<String> getArrayList1(int size) { | |
List<String> list = new ArrayList1<>(); // copy of java.util.ArrayList which extends AbstractList1 which is a copy of java.util.AbstractList | |
for (int i = 0; i < size; ++i) { | |
list.add(randomString()); | |
} | |
return list; | |
} | |
private List<String> getArrayList2(int size) { | |
List<String> list = new ArrayList2<>(); // copy of java.util.ArrayList which extends AbstractList2 which is a copy of java.util.AbstractList | |
for (int i = 0; i < size; ++i) { | |
list.add(randomString()); | |
} | |
return list; | |
} | |
private List<String> getArrayList3(int size) { | |
List<String> list = new ArrayList3<>(); // copy of java.util.ArrayList which extends AbstractList3 which is a copy of java.util.AbstractList | |
for (int i = 0; i < size; ++i) { | |
list.add(randomString()); | |
} | |
return list; | |
} | |
private String randomString() { | |
return UUID.randomUUID().toString(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment