[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-core-libs-dev
Subject: Re: Kind reminder about JDK-8193031
From: Сергей Цыпанов <sergei.tsypanov () yandex ! ru>
Date: 2019-06-24 13:57:56
Message-ID: 201641561384676 () iva7-8175209a746b ! qloud-c ! yandex ! net
[Download RAW message or body]
> Perhaps someone should do some more benchmarks. But
> that seems like an advantage of using addAll.
Hello,
I've done benchmarking for all JDK 12 basic Collections eligeable for post-creation \
modification.
Benchmark is available here:
https://github.com/stsypanov/benchmarks/blob/master/benchmark-runners/src/main/java/com/luxoft/logeek/benchmark/collection/CollectionsAddAllVsAddAllBenchmark.java
Results are below.
Observations:
- Collection.addAll massively wins for all cases when collection is array-base
- HashSet is the only case where Collections.addAll
mostly wins both in memory and time consumed (though only a tiny bit)
- COWList.addAll works faster than ArrayList.addAll (surprise to me)
I think Martin's original replacement would be enough to win in most of cases.
Regards,
Sergey Tsypanov
Benchmark (collection) (size) Mode \
Cnt Score Error Units
addAll ArrayList 10 avgt \
50 48,130 ± 5,660 ns/op addAll \
ArrayList 100 avgt 50 95,261 ± 2,743 ns/op addAll \
ArrayList 1000 avgt 50 797,863 ± 53,899 ns/op
collectionsAddAll ArrayList 10 avgt \
50 45,630 ± 2,244 ns/op collectionsAddAll \
ArrayList 100 avgt 50 544,830 ± 24,525 ns/op collectionsAddAll \
ArrayList 1000 avgt 50 4920,385 ± 115,845 ns/op
addAll HashSet 10 avgt \
50 133,388 ± 6,139 ns/op addAll \
HashSet 100 avgt 50 1891,604 ± 78,514 ns/op addAll \
HashSet 1000 avgt 50 17725,842 ± 638,902 ns/op
collectionsAddAll HashSet 10 avgt \
50 121,797 ± 7,919 ns/op collectionsAddAll \
HashSet 100 avgt 50 1744,140 ± 105,466 ns/op collectionsAddAll \
HashSet 1000 avgt 50 17135,886 ± 1091,500 ns/op
addAll ArrayDeque 10 avgt \
50 42,847 ± 1,285 ns/op addAll \
ArrayDeque 100 avgt 50 272,476 ± 4,924 ns/op addAll \
ArrayDeque 1000 avgt 50 2485,607 ± 99,762 ns/op
collectionsAddAll ArrayDeque 10 avgt \
50 44,048 ± 0,998 ns/op collectionsAddAll \
ArrayDeque 100 avgt 50 724,373 ± 26,408 ns/op collectionsAddAll \
ArrayDeque 1000 avgt 50 4270,549 ± 112,438 ns/op
addAll CopyOnWriteArrayList 10 avgt \
50 22,990 ± 2,547 ns/op addAll \
CopyOnWriteArrayList 100 avgt 50 37,778 ± 0,174 ns/op addAll \
CopyOnWriteArrayList 1000 avgt 50 352,620 ± 5,669 ns/op
collectionsAddAll CopyOnWriteArrayList 10 avgt \
50 248,284 ± 4,588 ns/op collectionsAddAll \
CopyOnWriteArrayList 100 avgt 50 2952,605 ± 157,642 ns/op \
collectionsAddAll CopyOnWriteArrayList 1000 avgt \
50 195007,626 ± 9350,521 ns/op
addAll ConcurrentLinkedDeque 10 avgt \
50 70,835 ± 0,680 ns/op addAll \
ConcurrentLinkedDeque 100 avgt 50 353,693 ± 9,919 ns/op addAll \
ConcurrentLinkedDeque 1000 avgt 50 3266,551 ± 132,046 ns/op
collectionsAddAll ConcurrentLinkedDeque 10 avgt \
50 172,823 ± 3,074 ns/op collectionsAddAll \
ConcurrentLinkedDeque 100 avgt 50 1559,449 ± 25,397 ns/op \
collectionsAddAll ConcurrentLinkedDeque 1000 avgt \
50 16573,979 ± 972,252 ns/op
------------------------------------------------------------------------------------------------------------------------
addAll: ·gc.alloc.rate.norm ArrayList 10 avgt \
50 136,000 ± 0,001 B/op
addAll: ·gc.alloc.rate.norm ArrayList 100 avgt \
50 856,000 ± 0,001 B/op
addAll: ·gc.alloc.rate.norm ArrayList 1000 avgt \
50 8056,000 ± 0,001 B/op
collectionsAddAll: ·gc.alloc.rate.norm ArrayList 10 avgt \
50 56,000 ± 0,001 B/op
collectionsAddAll: ·gc.alloc.rate.norm ArrayList 100 avgt \
50 1376,000 ± 0,001 B/op
collectionsAddAll: ·gc.alloc.rate.norm ArrayList 1000 avgt \
50 15000,000 ± 0,001 B/op
addAll: ·gc.alloc.rate.norm HashSet 10 avgt \
50 459,200 ± 3,667 B/op
addAll: ·gc.alloc.rate.norm HashSet 100 avgt \
50 5321,600 ± 3,920 B/op
addAll: ·gc.alloc.rate.norm HashSet 1000 avgt \
50 48508,801 ± 3,200 B/op
collectionsAddAll: ·gc.alloc.rate.norm HashSet 10 avgt \
50 464,000 ± 0,001 B/op
collectionsAddAll: ·gc.alloc.rate.norm HashSet 100 avgt \
50 5328,000 ± 0,001 B/op
collectionsAddAll: ·gc.alloc.rate.norm HashSet 1000 avgt \
50 48512,001 ± 0,001 B/op
addAll: ·gc.alloc.rate.norm ArrayDeque 10 avgt \
50 112,000 ± 0,001 B/op
addAll: ·gc.alloc.rate.norm ArrayDeque 100 avgt \
50 560,000 ± 0,001 B/op
addAll: ·gc.alloc.rate.norm ArrayDeque 1000 avgt \
50 4160,000 ± 0,001 B/op
collectionsAddAll: ·gc.alloc.rate.norm ArrayDeque 10 avgt \
50 112,000 ± 0,001 B/op
collectionsAddAll: ·gc.alloc.rate.norm ArrayDeque 100 avgt \
50 1048,000 ± 0,001 B/op
collectionsAddAll: ·gc.alloc.rate.norm ArrayDeque 1000 avgt \
50 14928,000 ± 0,001 B/op
addAll: ·gc.alloc.rate.norm CopyOnWriteArrayList 10 avgt \
50 88,000 ± 0,001 B/op
addAll: ·gc.alloc.rate.norm CopyOnWriteArrayList 100 avgt \
50 448,000 ± 0,001 B/op
addAll: ·gc.alloc.rate.norm CopyOnWriteArrayList 1000 avgt \
50 4048,000 ± 0,001 B/op
collectionsAddAll: ·gc.alloc.rate.norm CopyOnWriteArrayList 10 avgt \
50 456,000 ± 0,001 B/op
collectionsAddAll: ·gc.alloc.rate.norm CopyOnWriteArrayList 100 avgt \
50 22056,000 ± 0,001 B/op
collectionsAddAll: ·gc.alloc.rate.norm CopyOnWriteArrayList 1000 avgt \
50 2020056,008 ± 0,001 B/op
addAll: ·gc.alloc.rate.norm ConcurrentLinkedDeque 10 avgt \
50 312,000 ± 0,001 B/op
addAll: ·gc.alloc.rate.norm ConcurrentLinkedDeque 100 avgt \
50 2472,000 ± 0,001 B/op
addAll: ·gc.alloc.rate.norm ConcurrentLinkedDeque 1000 avgt \
50 24072,000 ± 0,001 B/op
collectionsAddAll: ·gc.alloc.rate.norm ConcurrentLinkedDeque 10 avgt \
50 288,000 ± 0,001 B/op
collectionsAddAll: ·gc.alloc.rate.norm ConcurrentLinkedDeque 100 avgt \
50 2448,000 ± 0,001 B/op
collectionsAddAll: ·gc.alloc.rate.norm ConcurrentLinkedDeque 1000 avgt \
50 24048,001 ± 0,001 B/op
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic