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

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

Tim > I've not even yet resolved the issue on MY case yet (its now a log4j 
problem I'm investigating), and looking at the code practice of the project, I 
suppose that opportunities for memory leak are quite numerous.

This is a self-reinforcing worst case : one reference is enough to create the 
leak, but the probability to have many leaks is high if you don't specifically 
test against it.

I far as I know, only commiters can really solve this problem, but for this 
they have to feel concerned about it, because it is a really hard problem. 
Finding a path between a GC root and an object is easy with appropriate tool, 
but connecting the memory map to the code path that led to it is hard.

> 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