org.apache.catalina.core
Class JreMemoryLeakPreventionListener

java.lang.Object
  extended by org.apache.catalina.core.JreMemoryLeakPreventionListener
All Implemented Interfaces:
LifecycleListener

public class JreMemoryLeakPreventionListener
extends java.lang.Object
implements LifecycleListener

Provide a workaround for known places where the Java Runtime environment can cause a memory leak or lock files.

Memory leaks occur when JRE code uses the context class loader to load a singleton as this will cause a memory leak if a web application class loader happens to be the context class loader at the time. The work-around is to initialise these singletons when Tomcat's common class loader is the context class loader.

Locked files usually occur when a resource inside a JAR is accessed without first disabling Jar URL connection caching. The workaround is to disable this caching by default.


Field Summary
protected  boolean appContextProtection
          Protect against the memory leak caused when the first call to sun.awt.AppContext.getAppContext() is triggered by a web application.
protected static StringManager sm
           
protected  boolean urlCacheProtection
          Protect against resources being read for JAR files and, as a side-effect, the JAR file becoming locked.
protected  boolean xmlParsingProtection
          XML parsing can pin a web application class loader in memory.
 
Constructor Summary
JreMemoryLeakPreventionListener()
           
 
Method Summary
 boolean isAppContextProtection()
           
 boolean isUrlCacheProtection()
           
 boolean isXmlParsingProtection()
           
 void lifecycleEvent(LifecycleEvent event)
          Acknowledge the occurrence of the specified event.
 void setAppContextProtection(boolean appContextProtection)
           
 void setUrlCacheProtection(boolean urlCacheProtection)
           
 void setXmlParsingProtection(boolean xmlParsingProtection)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

sm

protected static final StringManager sm

appContextProtection

protected boolean appContextProtection
Protect against the memory leak caused when the first call to sun.awt.AppContext.getAppContext() is triggered by a web application. Defaults to true.


urlCacheProtection

protected boolean urlCacheProtection
Protect against resources being read for JAR files and, as a side-effect, the JAR file becoming locked. Note this disables caching for all URLConnections, regardless of type. Defaults to true.


xmlParsingProtection

protected boolean xmlParsingProtection
XML parsing can pin a web application class loader in memory. This is particularly nasty as profilers (at least YourKit and Eclispe MAT) don't idenitfy any GC roots related to this.

Constructor Detail

JreMemoryLeakPreventionListener

public JreMemoryLeakPreventionListener()
Method Detail

isAppContextProtection

public boolean isAppContextProtection()

setAppContextProtection

public void setAppContextProtection(boolean appContextProtection)

isUrlCacheProtection

public boolean isUrlCacheProtection()

setUrlCacheProtection

public void setUrlCacheProtection(boolean urlCacheProtection)

isXmlParsingProtection

public boolean isXmlParsingProtection()

setXmlParsingProtection

public void setXmlParsingProtection(boolean xmlParsingProtection)

lifecycleEvent

public void lifecycleEvent(LifecycleEvent event)
Description copied from interface: LifecycleListener
Acknowledge the occurrence of the specified event.

Specified by:
lifecycleEvent in interface LifecycleListener
Parameters:
event - LifecycleEvent that has occurred


Copyright © 2000-2009 Apache Software Foundation. All Rights Reserved.