[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