一些Java编程老手在做CodeReview时,都会告诉其他人,使用HashMap时建议指定容量大小,原因是指定容量后,代码性能会更好一些。后来随着阿里Java开发手册在业内广为传播,这一点早已深入人心,我自己也早已习惯在使用HashMap时指定容量大小。但我今天突发奇想,想知道指定容量和不指定容量时性能究竟有多少的差异,测试部分测试数据的结果让我大跌眼睛,有些情况下指定容量的性能还比不指定容量时差!! ,但其他部分还是很符合我之前的认知的。
先说下我的测试平台和测试方法,我使用了openjdk17和jmh单线程测试,测试代码如下:
@Benchmark
@BenchmarkMode(Mode.Throughput)
@Measurement(iterations = 2, time = 5)
@Threads(1)
@Fork(0)
@Warmup(iterations = 1, time = 5)
public void withoutCap() {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < CAP; i++) {
map.put(random.nextInt(), 1);
}
}
@Benchmark
@BenchmarkMode(Mode.Throughput)
@Measurement(iterations = 2, time = 5)
@Threads(1)
@Fork(0)
@Warmup(iterations = 1, time = 5)
public void withCap() {
Map<Integer, Integer> map = new HashMap<>(CAP);
for (int i = 0; i < CAP; i++) {
map.put(rand