src/share/classes/sun/misc/Launcher.java
Print this page
rev 10187 : mq
*** 1,7 ****
/*
! * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
/*
! * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
*** 160,169 ****
--- 160,171 ----
/*
* Creates a new ExtClassLoader for the specified directories.
*/
public ExtClassLoader(File[] dirs) throws IOException {
super(getExtURLs(dirs), null, factory);
+ SharedSecrets.getJavaNetAccess().
+ getURLClassPath(this).initLookupCache(this);
}
private static File[] getExtDirs() {
String s = System.getProperty("java.ext.dirs");
File[] dirs;
*** 283,297 ****
--- 285,303 ----
return new AppClassLoader(urls, extcl);
}
});
}
+ final URLClassPath ucp;
+
/*
* Creates a new AppClassLoader
*/
AppClassLoader(URL[] urls, ClassLoader parent) {
super(urls, parent, factory);
+ ucp = SharedSecrets.getJavaNetAccess().getURLClassPath(this);
+ ucp.initLookupCache(this);
}
/**
* Override loadClass so we can checkPackageAccess.
*/
*** 303,312 ****
--- 309,334 ----
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPackageAccess(name.substring(0, i));
}
}
+
+ if (ucp.knownToNotExist(name)) {
+ // The class of the given name is not found in the parent
+ // class loader as well as its local URLClassPath.
+ // Check if this class has already been defined dynamically;
+ // if so, return the loaded class; otherwise, skip the parent
+ // delegation and findClass.
+ synchronized (getClassLoadingLock(name)) {
+ Class<?> c = findLoadedClass(name);
+ if (c != null) {
+ return c;
+ }
+ }
+ throw new ClassNotFoundException(name);
+ }
+
return (super.loadClass(name, resolve));
}
/**
* allow any classes loaded from classpath to exit the VM.
*** 384,393 ****
--- 406,416 ----
);
} else {
urls = new URL[0];
}
bcp = new URLClassPath(urls, factory);
+ bcp.initLookupCache(null);
}
}
public static URLClassPath getBootstrapClassPath() {
return BootClassPathHolder.bcp;