tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Thomas <ma...@apache.org>
Subject Re: svn commit: r1166290 - /tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java
Date Mon, 19 Sep 2011 11:12:25 GMT
On 12/09/2011 12:15, Konstantin Kolinko wrote:
> 2011/9/7 Mark Thomas <markt@apache.org>:
>> On 07/09/2011 19:49, Konstantin Kolinko wrote:
>>> 2011/9/7  <markt@apache.org>:
>>>> Author: markt
>>>> Date: Wed Sep  7 18:11:20 2011
>>>> New Revision: 1166290
>>>>
>>>> URL: http://svn.apache.org/viewvc?rev=1166290&view=rev
>>>> Log:
>>>> Add a simple annotation cache to improve performance for applications that
use lots of non-poolable tags.

<snip/>

>>> 2. I wonder when the cache is cleared. E.g. if we are in development
>>> mode or have enabled unloading unused JSPs in JspServlet
>>> configuration. If I understand correctly it accumulates references to
>>> Class objects but never releases them.
>>
>> When the context is stopped.
> 
> This issue is still pending.
> Though I think it concerns only development mode, and benefits of this
> cache out-weight the resource leak.

As written, it makes the maxLoadedJsps Jasper option useless.

I have given this some thought this morning and I plan on looking at a
WeakHashMap (plus synchronisation to handle the concurrency) based solution.

> 3. Regarding the instances not created through the instance manager:
> http://svn.apache.org/viewvc?rev=1166775&view=rev
> 
> The code is now skipping annotations in those classes.
> The old code would scan them for preDestroy annotations.
> I have not looked what behaviour is required by the specs here, but I
> think that the old behaviour was more correct.

I tend to the view that if the InstanceManager didn't create the object,
it isn't responsible for destroying it. That isn't the old behaviour and
I am +0 if you want to change the current code back to the old behaviour.

> 4. There is code that calls setAccessible() for Method, e.g.:
> 
>                 Method postConstruct = (Method) entry.getAccessibleObject();
>                 boolean accessibility = postConstruct.isAccessible();
>                 postConstruct.setAccessible(true);
>                 postConstruct.invoke(instance);
>                 postConstruct.setAccessible(accessibility);
> 
> There will be a race condition if several threads are changing
> (setting or restoring) the method accessibility flag on the same
> Method right before invoke() or isAccessible() calls.

I'll try and address this along with the WeakHashMap changes since I'll
be adding some syncs already.

Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Mime
View raw message