[
https://issues.apache.org/jira/browse/ARTEMIS-1383?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16151531#comment-16151531
]
ASF GitHub Bot commented on ARTEMIS-1383:
-----------------------------------------
Github user franz1981 commented on the issue:
https://github.com/apache/activemq-artemis/pull/1505
@clebertsuconic @tabish121 @gemmellr
I've used JMH to perform the burst tests (ie drainInBurst, pollInBurst) and
an unbounded offer/offerFirst (with pure accumulation, to kill any GC, using a
huge heap).
```
Benchmark
(qType) Mode Cnt Score Error Units
--------------------------------------------------------------------------------------------------------------------------------
Burst Size 1024
--------------------------------------------------------------------------------------------------------------------------------
QueueBenchmark.drainInBurst
JcLinkedList thrpt 5 56196.133 ± 9862.363 ops/s
QueueBenchmark.drainInBurst:·gc.count
JcLinkedList thrpt 5 4.000 counts
QueueBenchmark.drainInBurst:·gc.time
JcLinkedList thrpt 5 17.000 ms
QueueBenchmark.drainInBurst
ArtemisLinkedList thrpt 5 41398.925 ± 23173.625 ops/s
QueueBenchmark.drainInBurst:·gc.count
ArtemisLinkedList thrpt 5 2.000 counts
QueueBenchmark.drainInBurst:·gc.time
ArtemisLinkedList thrpt 5 9.000 ms
QueueBenchmark.drainInBurst
ChunkedQueue thrpt 5 105927.112 ± 37350.450 ops/s
QueueBenchmark.drainInBurst:·gc.count
ChunkedQueue thrpt 5 ≈ 0 counts
QueueBenchmark.drainInBurst
ArrayDeque thrpt 5 107934.616 ± 32457.204 ops/s
QueueBenchmark.drainInBurst:·gc.count
ArrayDeque thrpt 5 ≈ 0 counts
--------------------------------------------------------------------------------------------------------------------------------
QueueBenchmark.pollInBurst
JcLinkedList thrpt 5 81885.266 ± 17907.776 ops/s
QueueBenchmark.pollInBurst:·gc.count
JcLinkedList thrpt 5 13.000 counts
QueueBenchmark.pollInBurst:·gc.time
JcLinkedList thrpt 5 10.000 ms
QueueBenchmark.pollInBurst
ArtemisLinkedList thrpt 5 63050.521 ± 34661.415 ops/s
QueueBenchmark.pollInBurst:·gc.count
ArtemisLinkedList thrpt 5 18.000 counts
QueueBenchmark.pollInBurst:·gc.time
ArtemisLinkedList thrpt 5 16.000 ms
QueueBenchmark.pollInBurst
ChunkedQueue thrpt 5 161280.653 ± 13712.986 ops/s
QueueBenchmark.pollInBurst:·gc.count
ChunkedQueue thrpt 5 ≈ 0 counts
QueueBenchmark.pollInBurst
ArrayDeque thrpt 5 161606.204 ± 16735.474 ops/s
QueueBenchmark.pollInBurst:·gc.count
ArrayDeque thrpt 5 ≈ 0 counts
--------------------------------------------------------------------------------------------------------------------------------
QueueBenchmark.offer
JcLinkedList thrpt 5 6546939.112 ± 27962028.115 ops/s
QueueBenchmark.offer
ArtemisLinkedList thrpt 5 7366465.904 ± 31622858.611 ops/s
QueueBenchmark.offer
ChunkedQueue thrpt 5 41271280.062 ± 155829613.478 ops/s
--------------------------------------------------------------------------------------------------------------------------------
QueueBenchmark.offerFirst
JcLinkedList thrpt 5 5911597.446 ± 24163046.423 ops/s
QueueBenchmark.offerFirst
ArtemisLinkedList thrpt 5 3783064.578 ± 23493857.464 ops/s
QueueBenchmark.offerFirst
ChunkedQueue thrpt 5 35790062.086 ± 102802329.954 ops/s
```
As can be seen ChunkedQueue performs for fixed sized bursty scenarios like
an ArrayDeque (ie 1 order of magnitude better than any linked list) and for
accumulating burst (with no consume involved) one order of magnitude better
than a linked list (artemis or the Java Collection one).
> Improved Priority queue
> -----------------------
>
> Key: ARTEMIS-1383
> URL: https://issues.apache.org/jira/browse/ARTEMIS-1383
> Project: ActiveMQ Artemis
> Issue Type: Improvement
> Components: Broker
> Reporter: Francesco Nigro
> Assignee: Francesco Nigro
>
> The original PriorityLinkedList implementation is based on a double linked
> list implementation that suffer of:
> * fragmentation along the heap
> * pointer chasing due to the presence of nodes
> * allocation heavy (ie each add operation forces allocation of nodes)
> * high hidden (ie the nodes) memory footprint that lead to wrong memory
> estimations
> It is possible to provide a specialized chunked implementation that can
> address all these issues while providing a better performance (throughput,
> latency and memory footprint wise).
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)