From: markt Date: Tue, 29 Jan 2008 23:37:08 +0000 (+0000) Subject: Better fix for 43878. If we aren't re-loading, use a single class loader for JSPs... X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=ca23403ff6dfc47da03cc52092f7cf7aad1c9ceb;p=tomcat7.0 Better fix for 43878. If we aren't re-loading, use a single class loader for JSPs and tag files to reduce perm gen space usage git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@616563 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/jasper/JspCompilationContext.java b/java/org/apache/jasper/JspCompilationContext.java index 574105686..5a4504261 100644 --- a/java/org/apache/jasper/JspCompilationContext.java +++ b/java/org/apache/jasper/JspCompilationContext.java @@ -34,7 +34,6 @@ import org.apache.jasper.compiler.JspRuntimeContext; import org.apache.jasper.compiler.JspUtil; import org.apache.jasper.compiler.Localizer; import org.apache.jasper.compiler.ServletWriter; -import org.apache.jasper.servlet.JasperLoader; import org.apache.jasper.servlet.JspServletWrapper; /** @@ -176,11 +175,7 @@ public class JspCompilationContext { public ClassLoader getJspLoader() { if( jspLoader == null ) { - jspLoader = new JasperLoader - (new URL[] {baseUrl}, - getClassLoader(), - rctxt.getPermissionCollection(), - rctxt.getCodeSource()); + jspLoader = rctxt.getJspLoader(baseUrl, getClassLoader()); } return jspLoader; } diff --git a/java/org/apache/jasper/compiler/JspRuntimeContext.java b/java/org/apache/jasper/compiler/JspRuntimeContext.java index 6e4fe069b..c2fffa772 100644 --- a/java/org/apache/jasper/compiler/JspRuntimeContext.java +++ b/java/org/apache/jasper/compiler/JspRuntimeContext.java @@ -38,6 +38,7 @@ import org.apache.jasper.JspCompilationContext; import org.apache.jasper.Options; import org.apache.jasper.runtime.JspFactoryImpl; import org.apache.jasper.security.SecurityClassLoad; +import org.apache.jasper.servlet.JasperLoader; import org.apache.jasper.servlet.JspServletWrapper; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; @@ -155,6 +156,7 @@ public final class JspRuntimeContext { private ServletContext context; private Options options; private URLClassLoader parentClassLoader; + private JasperLoader jspLoader; private PermissionCollection permissionCollection; private CodeSource codeSource; private String classpath; @@ -317,6 +319,26 @@ public final class JspRuntimeContext { } + /** + * Obtain the classloader to use when loading JSP resources. In development + * mode or when running background compilations, each JSP has a separate + * classloader to enable easy re-loading of modified JSPs. If not in + * development mode, a single loader is used to reduce perm gen usage when + * many JSPs all use the same handful of tags. + */ + public URLClassLoader getJspLoader(URL baseUrl, ClassLoader parent) { + if (options.getDevelopment() || lastCheck > -1) { + return new JasperLoader(new URL[] {baseUrl}, parent, + permissionCollection, codeSource); + } + if (jspLoader == null) { + jspLoader = new JasperLoader(new URL[] {baseUrl}, parent, + permissionCollection, codeSource); + } + return jspLoader; + } + + // -------------------------------------------------------- Private Methods