[
https://issues.apache.org/jira/browse/JAMES-3745?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Benoit Tellier updated JAMES-3745:
----------------------------------
Attachment: fastByteArray.png
> FastByteArrayOutputStream is never downsized
> ---------------------------------------------
>
> Key: JAMES-3745
> URL: https://issues.apache.org/jira/browse/JAMES-3745
> Project: James Server
> Issue Type: Improvement
> Components: IMAPServer
> Affects Versions: 3.7.0
> Reporter: Benoit Tellier
> Priority: Major
> Fix For: 3.8.0
>
> Attachments: fastByteArray.png
>
>
> I started studying production heap dump in an effort to reduce the per user
> memory footprint. In conjunction with issues discussed in JAMES-3740 I found
> that in FastByteArrayOutputStream, upon writing a long line this buffer is
> sized up and never sized down.
> We can end up with 60KB+ memory allocated per user... Forever.
> While the impact is not as huge as the one described in JAMES-3740 yet for
> James deployment with a high connection density this could be non neglictible
> (100s MB of RAM).
> Furthermore given the long lived lifecycle of this buffer (connection) it is
> very likely to be promoted to the old gen, which could build up to eventually
> get long GC pauses.
> Suggestion: create a new IMAP composer for each request, 2 -> 64KB allocation
> is anyway neglictibe, likely cheaper than the lookups to get them back! We
> will thus allocate more memory, yes, but only for short lived durations, wich
> JVM GC is really good at.
> IMO it is so easy to avoid this unwanted behaviour that it would be sad not
> to do it.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]