[ 
https://issues.apache.org/struts/browse/WW-2167?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=43015#action_43015
 ] 

Nicolas Raynaud commented on WW-2167:
-------------------------------------

I've spent a few hours on this issue, looking at memory snapshots. My finding 
seems to be an ActionContext tied to a ThreadLocal (every route I checked in 
memory lead to an ActionContext in a ThreadLocal).

The problem is that I can't find any code path leading to an exit of the 
request leaving an ActionContext in the threadlocal to pin a bug.

> Memory leak when app stopped
> ----------------------------
>
>                 Key: WW-2167
>                 URL: https://issues.apache.org/struts/browse/WW-2167
>             Project: Struts 2
>          Issue Type: Bug
>    Affects Versions: 2.0.9
>         Environment: WebSphere 6.1.0.9 (non-network deploy) on Windows XP 
> Professional
> java version "1.5.0"
> Java(TM) 2 Runtime Environment, Standard Edition (build pwi32devifx-20070608 
> (SR5+IY99712))
> IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 Windows XP x86-32 
> j9vmwi3223-20070426 (JIT enabled)
> J9VM - 20070420_12448_lHdSMR
> JIT  - 20070419_1806_r8
> GC   - 200704_19)
> JCL  - 20070608
>            Reporter: Adam Crume
>             Fix For: 2.1.2
>
>
> Struts 2 somehow prevents the app's classes from being garbage collected when 
> the application is stopped or undeployed.
> I created a barebones Struts 2 app with an action with the following code:
>       private static final Object x = new Object() {
>               {
>                       System.out.println("================== Object created: 
> " + hashCode() + " ===================");
>               }
>               protected void finalize() throws Throwable {
>                       System.out.println("**************** Object finalized: 
> " + hashCode() + " *********************");
>               };
>       };
> Because of this static field, a message should be printed when the class is 
> initialized and when it is garbage collected.  "Object created" would be 
> printed out whenever I went to the action for the first time, but restarting 
> the app never printed "Object finalized."  This is not an issue with garbage 
> collection in my web container because doing the same thing with a servlet 
> resulted in both messages being printed.
> One problem is that the FilterDispatcher.init() method sets a ThreadLocal but 
> never clears it.  I fixed that by adding ActionContext.setContext(null); to 
> the end of the init() method, but that didn't solve the larger problem.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to