[prev in list] [next in list] [prev in thread] [next in thread] 

List:       jibx-devs
Subject:    [jibx-devs] [jira] Created: (JIBX-456) JiBX not caching marshaller
From:       "Wade Poziombka (JIRA)" <jira () codehaus ! org>
Date:       2011-09-01 20:39:32
Message-ID: 11776241.9966.1314909572164.JavaMail.haus-jira () codehaus01 ! managed ! contegix ! com
[Download RAW message or body]

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
jibx-devs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jibx-devs


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic