JiBX not caching marshaller and unmarshaller classes
----------------------------------------------------
Key: JIBX-456
URL: https://jira.codehaus.org/browse/JIBX-456
Project: JiBX
Issue Type: Bug
Components: core
Affects Versions: JiBX 1.2.3
Environment: Windows and Linux, JRE 1.6.0_xx, Eclipse equinox OSGi
container
Reporter: Wade Poziombka
When running under heavy load we find a lot of blocking on
ClassLoader.loadClass() of the variety below. On inspection it appears that
the caching (m_marshallerClasses and m_unmarshallerClasses members) of
BindingFactoryBase never cache these classes resulting in repeated calls to
loadClass. This has very detrimental impact on performance. I have patched
locally to load the classes at the bottom of the constructor as follows:
if (m_unmarshallers != null)
{
for (int i = 0; i < m_unmarshallers.length; ++i)
{
if (m_unmarshallers[i] != null)
{
m_unmarshallerClasses[i] =
loadClass(m_unmarshallers[i]);
}
}
}
if (m_marshallers != null)
{
for (int i = 0; i < m_marshallers.length; ++i)
{
if (m_marshallers[i] != null)
{
m_marshallerClasses[i] =
loadClass(m_marshallers[i]);
}
}
}
This significantly improves performance be eliminating lock contention on the
class loader. It appears this is the intended behavior from the code. However
nowhere in the code are classes assigned to the arrays.
example of blocking stack.
New I/O client worker #2-7 [BLOCKED] CPU time: 0:44
org.eclipse.osgi.internal.loader.BundleLoader.findImportedSource(String,
KeyedHashSet)
org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(String,
boolean, ClassLoader)
org.eclipse.osgi.internal.loader.BundleLoader.findClass(String, boolean)
org.eclipse.osgi.internal.loader.BundleLoader.findClass(String)
org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(String,
boolean)
java.lang.ClassLoader.loadClass(String)
org.jibx.runtime.impl.BindingFactoryBase.loadClass(String)
org.jibx.runtime.impl.BindingFactoryBase.getMarshallerClass(int)
org.jibx.runtime.impl.MarshallingContext.getMarshaller(String)
<myobject>.marshal(IMarshallingContext)
org.jibx.runtime.impl.MarshallingContext.marshalRoot(Object)
org.jibx.runtime.impl.MarshallingContext.marshalDocument(Object)
...
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
------------------------------------------------------------------------------
Special Offer -- Download ArcSight Logger for FREE!
Finally, a world-class log management solution at an even better
price-free! And you'll get a free "Love Thy Logs" t-shirt when you
download Logger. Secure your free ArcSight Logger TODAY!
http://p.sf.net/sfu/arcsisghtdev2dev
_______________________________________________
jibx-devs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jibx-devs