I wrote some code that used JBC 1.4.1.SP3, then later I converted it to use JBC 2.0.0.CR2,
and I noticed that at least a part of it is running MUCH slower. Like, an order of
magnitude slower.
That part of the code is putting a lot of data in the cache. I ran it with a profiler and
a debugger, and found that most time is spent in the SimpleEntry constructor (which is
getting called over 16 million times in my snapshot).
A frequent call sequence is:
CacheLoaderInterceptor.createNodes -> findChild ->
UnversionedNode.getChildrenMapDirect -> MapCopy -> SimpleEntry. There are a few
nodes that have MANY children, and JBC seems to call getChildrenMapDirect() on them
repeatedly, and it creates a new MapCopy every time, with a new SimpleEntry for every
child.
I looked at the JBC 1.4.1 code, and there CacheLoaderInterceptor.createNodes calls
AbstractNode.getChild which calls "get" directly from the children map, without
creating thousands of extra objects.
I don't know the reason why UnversionedNode.getChildrenMapDirect now has to make a new
MapCopy every time, but I can tell you it seriously affects performance.
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4059060#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...