Last active
April 11, 2017 04:27
-
-
Save orionll/b98072d5ba01f83596ceead9d8200e0e to your computer and use it in GitHub Desktop.
new ArrayList vs. addAll
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
import org.openjdk.jmh.annotations.*; | |
import java.util.ArrayList; | |
import java.util.List; | |
import java.util.concurrent.TimeUnit; | |
@BenchmarkMode(Mode.AverageTime) | |
@OutputTimeUnit(TimeUnit.MICROSECONDS) | |
@State(Scope.Thread) | |
public class ArrayListCreate { | |
private List<Integer> orig; | |
@Param({"100", "1000", "10000" }) | |
int size; | |
@Setup | |
public void setUp() { | |
orig = new ArrayList<>(); | |
for (int i = 0; i < size; i++) { | |
orig.add(i % 63); | |
} | |
} | |
@Benchmark | |
public ArrayList<Integer> addAll() { | |
ArrayList<Integer> list = new ArrayList<>(); | |
list.addAll(orig); | |
return list; | |
} | |
@Benchmark | |
public ArrayList<Integer> newArrayList() { | |
return new ArrayList<>(orig); | |
} | |
} | |
/* | |
Results: | |
# JMH 1.17.5 (released 46 days ago) | |
# VM version: JDK 1.8.0_121, VM 25.121-b13 | |
# VM invoker: C:\Program Files\Java\jdk1.8.0_121\jre\bin\java.exe | |
# VM options: <none> | |
# Warmup: 2 iterations, 2 s each | |
# Measurement: 5 iterations, 3 s each | |
# Timeout: 10 min per iteration | |
# Threads: 4 threads, will synchronize iterations | |
# Benchmark mode: Average time, time/op | |
... | |
Benchmark (size) Mode Cnt Score Error Units | |
ArrayListCreate.addAll 100 avgt 5 0,413 ? 0,019 us/op | |
ArrayListCreate.addAll 1000 avgt 5 3,220 ? 0,089 us/op | |
ArrayListCreate.addAll 10000 avgt 5 31,063 ? 1,654 us/op | |
ArrayListCreate.newArrayList 100 avgt 5 0,214 ? 0,004 us/op | |
ArrayListCreate.newArrayList 1000 avgt 5 1,944 ? 0,038 us/op | |
ArrayListCreate.newArrayList 10000 avgt 5 20,131 ? 1,961 us/op | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment