Kabir Khan [
http://community.jboss.org/people/kabir.khan%40jboss.com] replied to the
discussion
"JBoss Reflect Performance Javassist vs Introspection"
To view the discussion, visit:
http://community.jboss.org/message/538459#538459
--------------------------------------------------------------
I have implemented a first attempt at my five points above, but am still getting longer AS
startup times with the javassist-based implementation of jboss-reflect than the
introspection one.
I have added the possibility to record metrics of the invocation count and the invocation
time, and an MBean to get hold of the results which look like this:
Invocations (total time in ms) - Member name
============================================
1473 (0) - org.jboss.metadata.javaee.support.NamedMetaData.setName(Ljava/lang/String;)V -
{G}
1281 (0) - org.jboss.metadata.web.spec.AttributeMetaData()V - {G}
1219 (0) - org.jboss.metadata.web.spec.AttributeMetaData.setRequired(Ljava/lang/String;)V
- {G}
1132 (0) - org.jboss.metadata.javaee.spec.DescriptionImpl()V - {G}
1132 (3) -
org.jboss.metadata.javaee.spec.DescriptionImpl.setDescription(Ljava/lang/String;)V - {G}
1127 (2) - org.jboss.metadata.javaee.spec.DescriptionsImpl()V - {G}
988 (0) -
org.jboss.metadata.javaee.support.NamedMetaDataWithDescriptions.getDescriptions()Lorg/jboss/annotation/javaee/Descriptions;
- {G}
988 (0) -
org.jboss.metadata.javaee.support.NamedMetaDataWithDescriptions.setDescriptions(Lorg/jboss/annotation/javaee/Descriptions;)V
- {G}
...
The time is not accurate, a lot of the invocations have a long "inherent time"
such as org.hornetq.jms.server.impl.JMSServerManagerImpl.start(), and for simple setters
the time is too short to be picked up. Anyway, the invocation count gives some idea of
what is going on. I noticed that the bean metadata classes don't appear in this list,
which is a bit strange so I need to figure out why that is.
By default, to avoid the overhead of generating classes for accessors that will not be
used a lot, it is now set up to simply do what the introspection implementation does by
default, which is to just invoke the members by reflection. The {G} and {R} after the
member name indicates whether the accessor was generated or uses reflection. For
frequently used accessors, I currently have a file called forceGenerate.txt in the bin/
folder of AS where you can specify which accessors should use a generated class:
org.jboss.metadata.javaee.support.NamedMetaData.setName(Ljava/lang/String;)V
org.jboss.metadata.web.spec.AttributeMetaData()V
org.jboss.metadata.web.spec.AttributeMetaData.setRequired(Ljava/lang/String;)V
org.jboss.metadata.javaee.spec.DescriptionImpl()V
org.jboss.metadata.javaee.spec.DescriptionImpl.setDescription(Ljava/lang/String;)V
org.jboss.metadata.javaee.spec.DescriptionsImpl()V
org.jboss.metadata.javaee.support.NamedMetaDataWithDescriptions.getDescriptions()Lorg/jboss/annotation/javaee/Descriptions;
org.jboss.metadata.javaee.support.NamedMetaDataWithDescriptions.setDescriptions(Lorg/jboss/annotation/javaee/Descriptions;)V
org.jboss.metadata.web.spec.TagMetaData.getAttributes()Ljava/util/List;
org.jboss.metadata.web.spec.DeferredValueMetaData()V
org.jboss.metadata.web.spec.AttributeMetaData.setDeferredValue(Lorg/jboss/metadata/web/spec/DeferredValueMetaData;)V
org.jboss.metadata.web.spec.DeferredValueMetaData.setType(Ljava/lang/String;)V
org.jboss.metadata.web.spec.AttributeMetaData.setRtexprvalue(Ljava/lang/String;)V
Doing this for the top 10 used accessors improves the startup time very slightly, but it
is still a lot slower than when using the introspection implementation. This leads me to
thinking that something in this alternative implementation is playing a bigger part in
slowing this down than the accessors. It could be something in the classpools, or maybe
some inefficiencies in JavassistTypeInfo and related classes. I'll work on creating
some benchmarks that can be run in AS and profile those to get a better idea of what is
going on.
--------------------------------------------------------------
Reply to this message by going to Community
[
http://community.jboss.org/message/538459#538459]
Start a new discussion in JBoss Microcontainer Development at Community
[
http://community.jboss.org/choose-container!input.jspa?contentType=1&...]