<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">
<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>
                                <td>
                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="http://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">Community</a></h1>
                                                                </td>
                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px; -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
JBoss Reflect Performance Javassist vs Introspection
</h3>
<span style="margin-bottom: 10px;">
created by <a href="http://community.jboss.org/people/kabir.khan%40jboss.com">Kabir Khan</a> in <i>JBoss Microcontainer Development</i> - <a href="http://community.jboss.org/message/537409#537409">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">
<div class="jive-rendered-content"><p><span>I have created a simple benchmark where I test the performance of different things using the different implementations. It can be found at </span><a class="jive-link-external-small" href="https://svn.jboss.org/repos/jbossas/projects/jboss-reflect/trunk/src/test/java/org/jboss/test/benchmark/AccessorBenchmark.java" target="_blank">https://svn.jboss.org/repos/jbossas/projects/jboss-reflect/trunk/src/test/java/org/jboss/test/benchmark/AccessorBenchmark.java</a></p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>It first generates 100 classes, each with 100 fields and 100 methods, then it:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><ul><li>A) Obtains a ClassInfo for each class</li><li>B) Goes through each class and calls getDeclaredField() and getDeclaredMethod() for each field/method. This is done 50 times</li><li>C) Calls FieldInfo.get/set and MethodInfo.get/set once for each field/method</li><li>D) Same as C, but now it happens 50 times</li></ul><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>Here are the times:</p><blockquote class="jive-quote"><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><div id="_mcePaste">========== IntrospectionTypeInfoFactory</div>
<div id="_mcePaste">A - Creating 100 ClassInfos 141ms</div>
<div id="_mcePaste">B - Getting 100 fields and methods for 100 classes 50 times 1446ms</div>
<div id="_mcePaste">C - First accessing 100 fields and methods for 100 classes 50 times 116ms</div>
<div id="_mcePaste">D - Accessing 100 fields and methods for 100 classes 50 times 3545ms</div>
<div id="_mcePaste">Done!</div><div id="_mcePaste"> </div>
<div id="_mcePaste"> </div>
<div id="_mcePaste">========== JavassistTypeInfoFactory</div>
<div id="_mcePaste">A - Creating 100 ClassInfos 164ms</div>
<div id="_mcePaste">B - Getting 100 fields and methods for 100 classes 50 times 820ms</div>
<div id="_mcePaste">C - First accessing 100 fields and methods for 100 classes 50 times 4557ms</div>
<div id="_mcePaste">D - Accessing 100 fields and methods for 100 classes 50 times 272ms</div>
<div id="_mcePaste">Done!</div><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p></blockquote><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><ul><li>Creating the ClassInfos (A) takes about the same time with the two implementations.</li><li>Calling getDeclaredMethod()/-Field() (B) is about twice as fast using Javassist as introspection.</li><li>The first time a joinpoint is invoked is very slow with Javassist (due to generating the class), while subsequent calls are very fast</li></ul><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>I'll profile C to see if it can be made faster somehow. Although, 20,000 classes are created so my guess is that creating an output stream for the class bytes for each class and then it with the classloader is the real overhead</p></div>
<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
<p style="margin: 0;">Reply to this message by <a href="http://community.jboss.org/message/537409#537409">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in JBoss Microcontainer Development at <a href="http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2115">Community</a></p>
</div></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>