You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2016/05/01 22:56:02 UTC
svn commit: r1741892 -
/tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java
Author: markt
Date: Sun May 1 20:56:02 2016
New Revision: 1741892
URL: http://svn.apache.org/viewvc?rev=1741892&view=rev
Log:
Traverse StandardJarScanner's class loader hierarchy once rather than once per scan. Marginally improves start times.
Modified:
tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java
Modified: tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java?rev=1741892&r1=1741891&r2=1741892&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java Sun May 1 20:56:02 2016
@@ -23,6 +23,7 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.net.URLConnection;
+import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
@@ -60,8 +61,21 @@ public class StandardJarScanner implemen
/**
* The string resources for this package.
*/
- private static final StringManager sm =
- StringManager.getManager(Constants.Package);
+ private static final StringManager sm = StringManager.getManager(Constants.Package);
+
+ private static final Set<ClassLoader> CLASSLOADER_HIERARCHY;
+
+ static {
+ Set<ClassLoader> cls = new HashSet<>();
+
+ ClassLoader cl = StandardJarScanner.class.getClassLoader();
+ while (cl != null) {
+ cls.add(cl);
+ cl = cl.getParent();
+ }
+
+ CLASSLOADER_HIERARCHY = Collections.unmodifiableSet(cls);
+ }
/**
* Controls the classpath scanning extension.
@@ -282,16 +296,8 @@ public class StandardJarScanner implemen
* the system class loader is not an application class loader
* the bootstrap class loader is not an application class loader
*/
- private boolean isWebappClassLoader(ClassLoader classLoader) {
- ClassLoader nonWebappLoader = StandardJarScanner.class.getClassLoader();
-
- while (nonWebappLoader != null) {
- if (nonWebappLoader == classLoader) {
- return false;
- }
- nonWebappLoader = nonWebappLoader.getParent();
- }
- return true;
+ private static boolean isWebappClassLoader(ClassLoader classLoader) {
+ return !CLASSLOADER_HIERARCHY.contains(classLoader);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org