RFR (M) 8061651 - Interface to the Lookup Index Cache to improve URLClassPath search time (round 3)

Jiangli Zhou jiangli.zhou at oracle.com
Tue Oct 28 21:45:12 UTC 2014


Hi Ioi,

This sounds ok.

Thanks,
Jiangli

On 10/27/2014 09:57 PM, Ioi Lam wrote:
>
> On 10/27/14, 7:52 PM, Jiangli Zhou wrote:
>> Hi Ioi,
>>
>> I have a question for following code in AppClassLoader.loadClass(). 
>> If a class is 'known to not exist' for the AppClassLoader (not in the 
>> AppClassLoader and parent classloaders' shared lookup cache), it 
>> seems findLoadedClass() would only find classes that's dynamically 
>> loaded by the parent loaders. The AppClassLoader would never try to 
>> load the class. Is the AppClassLoader's lookup cache guaranteed to 
>> have all the classes in it's path?
>>
>>  315             if (ucp.knownToNotExist(name)) {
>>  316                 // The class of the given name is not found in 
>> the parent
>>  317                 // class loader as well as its local URLClassPath.
>>  318                 // Check if this class has already been defined 
>> dynamically;
>>  319                 // if so, return the loaded class; otherwise, 
>> skip the parent
>>  320                 // delegation and findClass.
>>  321                 synchronized (getClassLoadingLock(name)) {
>>  322                     Class<?> c = findLoadedClass(name);
>>  323                     if (c != null) {
>>  324                         return c;
>>  325                     }
>>  326                 }
>>  327                 throw new ClassNotFoundException(name);
>>  328             }
> The reason is to make the behavior consistent with 
> java.lang.ClassLoader.loadClass():
>
>     protected Class<?> loadClass(String name, boolean resolve)
>         throws ClassNotFoundException
>     {
>         synchronized (getClassLoadingLock(name)) {
>             // First, check if the class has already been loaded
>             Class<?> c = findLoadedClass(name);
>             ....
>
> If <name> is not in any of the JAR files but was dynamically defined 
> (using ClassLoader.defineClass, etc), then AppClassLoader.loadClass() 
> should return the class without throwing ClassNotFoundException.
>
> Thanks
> - Ioi
>
>> Thanks,
>> Jiangli
>>
>> On 10/27/2014 3:32 PM, Ioi Lam wrote:
>>> Hi David, I have update the latest webrev at:
>>>
>>> http://cr.openjdk.java.net/~iklam/8061651-lookup-index-open-v3/
>>>
>>> and fixed the "int cache[]" style you mentioned.
>>>
>>> This version also contains the JDK test case that Mandy requested:
>>>
>>> http://cr.openjdk.java.net/~iklam/8061651-lookup-index-open-v3/jdk/test/sun/misc/URLClassPath/EnableLookupCache.java.html 
>>>
>>>
>>> Thanks
>>> - Ioi
>>>
>



More information about the hotspot-runtime-dev mailing list