[
https://issues.apache.org/jira/browse/ARTEMIS-1383?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16153210#comment-16153210
]
ASF GitHub Bot commented on ARTEMIS-1383:
-----------------------------------------
Github user franz1981 commented on the issue:
https://github.com/apache/activemq-artemis/pull/1505
@clebertsuconic In the meantime I've done some experiments with [Java
Object Layout](http://openjdk.java.net/projects/code-tools/jol/), a tool that
compute the deep size of any instance on the heap, to evaluate the difference
(memory wise) between `LinkedListImpl` and `ChunkedQueue`.
I've used a very small chunk size of 32 (ie with arrays of 33 elements for
each chunk), to compare with `LinkedListImpl`.
With no instances:
```
org.apache.activemq.artemis.utils.collections.LinkedListImpl@7ba4f24fd
footprint:
COUNT AVG SUM DESCRIPTION
1 56 56
[Lorg.apache.activemq.artemis.utils.collections.LinkedListImpl$Iterator;
1 40 40
org.apache.activemq.artemis.utils.collections.LinkedListImpl
1 32 32
org.apache.activemq.artemis.utils.collections.LinkedListImpl$Node
3 128 (total)
org.apache.activemq.load.generator.ChunkedQueue@6ed3ef1d footprint:
COUNT AVG SUM DESCRIPTION
1 152 152 [Ljava.lang.Object;
1 40 40
org.apache.activemq.load.generator.ChunkedQueue
2 192 (total)
```
With 31 instances:
```
org.apache.activemq.artemis.utils.collections.LinkedListImpl@7ba4f24fd
footprint:
COUNT AVG SUM DESCRIPTION
1 56 56
[Lorg.apache.activemq.artemis.utils.collections.LinkedListImpl$Iterator;
1 24 24 java.lang.Long
1 40 40
org.apache.activemq.artemis.utils.collections.LinkedListImpl
32 32 1024
org.apache.activemq.artemis.utils.collections.LinkedListImpl$Node
35 1144 (total)
org.apache.activemq.load.generator.ChunkedQueue@57fa26b7d footprint:
COUNT AVG SUM DESCRIPTION
1 152 152 [Ljava.lang.Object;
1 24 24 java.lang.Long
1 40 40
org.apache.activemq.load.generator.ChunkedQueue
3 216 (total)
```
With 10000 instance:
```
org.apache.activemq.artemis.utils.collections.LinkedListImpl@7ba4f24fd
footprint:
COUNT AVG SUM DESCRIPTION
1 56 56
[Lorg.apache.activemq.artemis.utils.collections.LinkedListImpl$Iterator;
1 24 24 java.lang.Long
1 40 40
org.apache.activemq.artemis.utils.collections.LinkedListImpl
10001 32 320032
org.apache.activemq.artemis.utils.collections.LinkedListImpl$Node
10004 320152 (total)
org.apache.activemq.load.generator.ChunkedQueue@1894593ad footprint:
COUNT AVG SUM DESCRIPTION
323 152 49096 [Ljava.lang.Object;
1 24 24 java.lang.Long
1 16 16 java.lang.Object
1 40 40
org.apache.activemq.load.generator.ChunkedQueue
326 49176 (total)
```
Totals are pretty explicative, the `ChunkedQueue` (even with very small
chunk size) tends to have a 10X smaller memory footprint than a
`LinkedListImpl`.
> 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)