I think this is great information.  I would like to see some test cases that
support your information.  In addition to the test cases, what
environment/IDE are you performing this research on?

Thanks and great work!

On 6/19/07, Gaston Dombiak <[EMAIL PROTECTED]> wrote:

Hey,



We are opening 60K concurrent connections to Openfire and generating
some heap dumps to analyze memory consumption. And we found something
that really surprised us since we never heard about it. A very big part
of the total memory is being consumed by ConcurrentHashMaps. The
ConcurrentHashMap uses internal objects to keep track of its content and
even if you have an "empty" ConcurrentHashMap the map will create as
many segments as its default size.



Tracing the references I see that BaseIoSession uses a ConcurrentHashMap
to keep track of the session attributes. Based on this finding I made
some changes to Openfire so that not highly concurrent code and heavily
used code would use synchronized + HashMap (the old style we can say)
instead of a ConcurrentHashMap. I don't see that MINA uses the session
attributes and in the Openfire's case the usage of those attributes is
high (but not that high) and never concurrent. So what do you think of
changing BaseIoSession to use a HashMap and use synchronized block when
accessing that variable? HashMap also uses internal objects but they are
smaller and less objects.



Regards,



  -- Gato




--
..Cheers
Mark

Reply via email to