[
https://issues.jboss.org/browse/JGRP-1990?page=com.atlassian.jira.plugin....
]
Bela Ban commented on JGRP-1990:
--------------------------------
The memory savings are nice:
{noformat}
org.jgroups.util.Headers object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 12 (object header) N/A
12 4 short[] Headers.ids N/A
16 4 Header[] Headers.hdrs N/A
20 4 (loss due to the next object alignment)
Instance size: 24 bytes (estimated, the sample instance is not available)
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total
{noformat}
A message had a ref to a {{Headers}} instance, which had refs to an {{id}} (carrying the
prot-ids) and a {{headers}} array (carrying the actual headers). A {{Headers}} instances
takes roughly 24 bytes of memory as shown above. Half of that is the cost of the _object
header_ (12 bytes)!
The new message has a ref to a {{Header[]}} array, in which all headers are stored. The
{{Header}} abstract superclass now also carries a short which adds 2 bytes to each
header.
The advantages of this new approach, which stores headers directly in an array of
{{Message}} are:
* Less memory need: the overall cost of maintaining headers (without the cost of the
actual headers) is now ~ 24 bytes - 2 bytes = *22 bytes lower* (per message) !
* If the headers array needs to be grown, we only have to grow 1 rather than 2 arrays
Headers: use 1 array rather than 2
----------------------------------
Key: JGRP-1990
URL:
https://issues.jboss.org/browse/JGRP-1990
Project: JGroups
Issue Type: Enhancement
Reporter: Bela Ban
Assignee: Bela Ban
Fix For: 3.6.7
Currently, {{Headers}} uses 1 array for ids and 1 for the actual headers. Experiment
whether joining them into one array makes sense, e.g.:
{noformat}
| id-1 | hdr-1 | id-2 | hdr-2 | ... | id-n | hdr-n |
{noformat}
This saves 4 bytes (compressed OOPs) for an array ref, plus the overhead of the array
itself. Plus, resizing only has to be applied to 1 array.
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)