Konstantin,

On 4/28/12 8:58 PM, Konstantin Kolinko wrote:
> 2012/4/27 Christopher Schultz <ch...@christopherschultz.net>:
>> All,
>>
>> I've been doing some memory profiling on my webapp to see where I can
>> reduce our memory footprint a bit by combining equivalent objects.
>> YourKit has some nice utilities to look for duplicate objects --
>> especially Strings.
>>
>> I can see that the string "java.lang.String" has lots of duplicates.
>> Many of the ones I've inspected so far can be traced-back to
>> catalina.mbeans.MBeanUtils and the registry of MBeans that it contains.
>>
>> Would anyone object to using String-interning to share copies of class
>> names for MBeans? I could even restrict such interning to Strings that
>> start with "java.lang" since those are probably the most-used ones, and
>> those strings are probably already interned by all the RTTI
>> infrastructure in the JVM anyway.
> 
> I think that the string returned by class.getName() as well as field
> and method names should be already interned by JVM.
> 
> So instead of String.intern() it should be possible to call class.getName(). 
> :/

That's what I would have expected, but I can see logs of duplicate
String values (like "java.lang.String" for instance), many linked from
JMX beans. I haven't looked at the code, but I'll bet the string values
from directly from the XML files and aren't resolved against actually
Class objects ... that would improve performance a bit during deployment.

> I am OK with your proposal, but I do not expect much savings from
> getting rid of those duplicates.   Does YouKit show some estimates?

It did, but I closed it long ago so I'll have to re-check. IIRC, it was
a couple of MiB. Of course, it's not feasible to check 100% of them
because there were so many copies. I can hack a bit at Tomcat and see
what percentage of them disappear. Then I'll know whether such a change
in Tomcat actually has a meaningful impact.

Thanks,
-chris

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to