Hi Juan,

I think your problem can't be solved (only) by Tomcat.
The problem is that objets stay in memory because of pointers on static 
references...

To solve this :
You can embed a CleanupListener in your webapp.
This listener seem to be like this :
------------
package com.yourWebApp;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class CleanupListener implements ServletContextListener 
{
  public MyCleanupListener() { super(); }
  public void contextInitialized(ServletContextEvent event) { }

  public void contextDestroyed(ServletContextEvent event) {
    MySingleton.delInstance();
  }
}
-----------

Before this, you have to 
1) modify your MySingleton with :

public static void delInstance()
{
  if (_instance != null) { _instance._charWidths=null; }
  _instance = null;
}
2) add, in web.xml :
<listener>
  <listener-class>com.yourWebApp.CleanupListener</listener-class>
</listener>

Notes :
- Perhaps your Listener will have to delete other objets like SQL drivers, 
commons logger, ...
- see also : 
http://opensource2.atlassian.com/confluence/spring/pages/viewpage.action?pageId=2669

Regards.

On Mon, 28 Nov 2005 08:29:13 +0000
kurrele <[EMAIL PROTECTED]> wrote:

> Hi to everyone!! This is my first email to this list, hope is the correct
> one.
> 
> I've been analyzing my code with a profiler (JProbe) because I was getting
> an
> OutOfMemoryException after a few redeploys of my application.
> 
> After some tests, it turned out that my static fields were not GCed after
> redeploying, getting stuck with the classloader which loaded my classes.
> 
> After that, I searched the bugzilla and found
>   *Bug# *(Memory Leak in Classloader/Manager deploy/undeploy)*:*
> 20758<http://issues.apache.org/bugzilla/show_bug.cgi?id=20758>
> where it says that the bug has been FIXED.
> 
> I tested it in Tomcat 4.1.24 and 5.0.28 getting the same result (memory leak
> in static fields).
> 
> I attach here the servlet and singleton of my simple test webapp.
> 
> ---------------------------------------------------------------------------------------------------------------------------
> public class Test extends HttpServlet
> {
> 
>     MySingleton singleton = MySingleton.getInstance();
> 
>     public void init(ServletConfig config) throws ServletException
>     {
>         super.init(config);
> 
>     }
> 
>     public void destroy()
>     {
>         singleton = null;
>     }
> 
>     protected void processRequest(HttpServletRequest request,
> HttpServletResponse response)
>     throws ServletException, IOException
>     {
>         response.setContentType("text/html");
>         PrintWriter out = response.getWriter();
>         out.println("<html><head><title>JProbe TEST
> singleton</title></head><body><b>JProbe TEST
> singleton</b><BR></body></html>");
>         out.close();
>     }
>     protected void doGet(HttpServletRequest request, HttpServletResponse
> response)
>     throws ServletException, IOException
>     {
>         processRequest(request, response);
>     }
> 
>     protected void doPost(HttpServletRequest request, HttpServletResponse
> response)
>     throws ServletException, IOException
>     {
>         processRequest(request, response);
>     }
> }
> 
> 
> -------------------------------------------------------------------------------------------------------------------------------------
> public class MySingleton
> {
> 
>     private static MySingleton _instance = new MySingleton();
> 
>     public byte[] _charWidths = new byte[1024*1024];  // 1Meg mem
> allocation!!.
> 
>     private MySingleton()
>     {}
> 
>     public static MySingleton getInstance()
>     {
>         return _instance;
>     }
> 
>     public void finalize()
>     {
>         System.out.println("!!! END-MySingleton !!!");
>         _instance = null;
>     }
> }
> 
> 
> -------------------------------------------------------------------------------------------------------------------------------------
> 
> After redeploying this simple webapp a 1Meg leak can be found due to
> MySingleton not being GCed.
> 
> Please I want to know If I'm leaving out something, the bug is not really
> fixed or I need to take another approach.
> 
> Thanks.
> 
>  Juan F. S. (Spain).
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to