ServiceTCCL composite breaks class caching in java reflection, jboss
serialization, ...
---------------------------------------------------------------------------------------
Key: AXIS2-4957
URL: https://issues.apache.org/jira/browse/AXIS2-4957
Project: Axis2
Issue Type: Bug
Components: kernel
Affects Versions: 1.5.4, nightly
Reporter: Chuck Williams
Setting ServiceTCCL parameter to composite gives threads executing request
operations access to classes loaded by either the default thread context class
loader or the service class loader. AbstractMessageReceiver resets the
thread's context class loader to a composite class loader that consults both of
these sources on every invocation. The current code does this by constructing
a new composite class loader every time. This has catastrophic performance
consequences if the request-processing thread makes extensive use of java
reflection or other class-caching mechanisms such as jboss serialization.
Class caching in java reflection and generally other places is indexed to the
class loader. By creating a new composite class loader for every request
processed by a service, these requests get no class caching! This slows down
java reflection, jboss serialization, etc., by over an order of magnitude and
bloats perm gen space with unnecessary generated classes (java reflection
accessor classes, jboss serialization ClassMetaData, etc.). New classes are
generated for every request unnecessarily. The performance of java reflection
in particular is dependent on effective caching of its generated accessor
classes. In an actual axis2 application the bloat increased perm gen space
from about 80 meg to over 2 Gig and java reflection accessor class regeneration
became the primary performance bottleneck.
The fix is simple: cache and reuse the composite ServiceTCCL.
I'm testing a patch with the fix now and will upload when verified.
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]