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#4059060

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4059060
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to