[jboss-dev] Multiple classLoaders for a single WAR file on Tomcat

Scott M Stark sstark at redhat.com
Tue Aug 7 12:14:44 EDT 2007


Ok, that is a temporary cl used to scan for annotations. It could be
cleared as soon as the associated deployment is started.

Clebert Suconic wrote:
> This is where URLClassLoader is being created:
> 
> 
> https://svn.jboss.org/repos/jbossas/branches/Branch_4_2/server/src/main/org/jboss/web/AbstractWebContainer.java
> 
> 
> line 410>       di.annotationsCl = new URLClassLoader(urlArr, di.ucl);
> 
> 
> 
> Clebert Suconic wrote:
>> I can't tell where this is being created.. but I can tell where is
>> being referenced.
>>
>>
>> the URLClassLoader is being referenced at DeploymentInfo.annotationsCL:
>>
>>
>>
>> java.net.URLClassLoader at 21471599
>> !--- FieldReference public transient java.net.URLClassLoader
>> org.jboss.deployment.DeploymentInfo.annotationsCl=org.jboss.deployment.DeploymentInfo at 3720195
>>  Detail
>> !--- FieldReference private java.lang.ClassLoader
>> java.security.ProtectionDomain.classloader=java.security.ProtectionDomain at 28805459
>>  Detail
>> !--- FieldReference private final transient java.lang.ClassLoader
>> java.lang.Package.loader=java.lang.Package at 13417143
>>
>>
>> The other one (WebAppClassLoader) has a bunch of references on Tomcat
>> and Jasper compiler...
>>
>>
>>
>> Sometimes those deployments are dulicated for some reason... When I
>> get the URLClassLoader duplicated, I have two distinct
>> DeploymentInfo.annotationsCLs referencing it.  (ON jboss-4.0.5). on
>> JBoss 4-2 I haven't seen the same behavior when I tried (tried only
>> once).
>>
>>
>> Clebert
>>
>> Scott M Stark wrote:
>>> That should only be true if the context is enabled for that, and I did
>>> not think that was the default. Can you show the creation point of each
>>> class loader involved here?
>>>
>>> Adrian wrote:
>>>> I assume this is because Servlets can be individually reloaded?
>>>>
>>>> On Fri, 2007-08-03 at 17:11 -0500, Clebert Suconic wrote:
>>>>> This is probably a question for Remy:
>>>>>
>>>>> Why Tomcat creates multiple ClassLoaders for every deployment?
>>>>>
>>>>> Is this by design or this is a leak?
>>>>>
>>>>> For a single WAR, I'm seeing 4 classLoaders deployed just wasting
>>>>> PermGeneration memory.
>>>>>
>>>>> For example, I deployed a single WAR, and I've got this Servlet
>>>>> loaded by 4 distinct classLoaders. and this is a standard behavior
>>>>> I have seen on Tomcat for a long time already.
>>>>>
>>>>> org.jboss.on.plugins.servlet.test.Counter:
>>>>>
>>>>> - java.net.URLClassLoader at 10891966
>>>>> - org.jboss.web.tomcat.tc5.WebAppClassLoader at 18775238
>>>>> - java.net.URLClassLoader at 22498184
>>>>> - org.jboss.web.tomcat.tc5.WebAppClassLoader at 8238932
>>>>>
>>>>>
>>>>> Also... if you use any other profiler (besides the ClassLoader
>>>>> analysis I've written on JBossProfiler) you could be foolished by
>>>>> them as those classes won't have any instances... Just the classDef
>>>>> loaded on the heap.
>>>>>
>>>>>
>>>>>
>>>>> Clebert




More information about the jboss-development mailing list