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

Mandy Chung mandy.chung at oracle.com
Fri Oct 24 21:33:49 UTC 2014


On 10/23/2014 9:34 PM, Ioi Lam wrote:
> Hi Mandy,
>
> Thanks for the review. I have updated the patch:
>
> http://cr.openjdk.java.net/~iklam/8061651-lookup-index-open-v2/
>
>

Thanks for removing the LoaderType enum.  Two questions -
do you need the new hasLookupCacheLoader variable?  Should
lookupCAcheURLs be always be non-null if it has the lookup
cache?

Most methods referencinglookupCacheURLs and lookupCacheLoader
are synchronized except initLookupCache and knowToNotExist.
Should they?  Or volatile?

> On 10/21/14, 12:56 PM, Mandy Chung wrote:
>
>> line 398: what happens if loaders.size() > maxindex?  Shouldn't
>>    it return null?
> In this case, all the loaders that's needed by the cache[] have been 
> opened. So we should return cache[].

I forget about that, sorry.    I'm thinking how to make it more obvious 
to those who doesn't know much of the details.  Every time I read this 
and I need to reload what I know about and miss something.

> I changed the code to this. What do you think?

It seems to me that it would help if you refactor and add a method 
"ensureLoadersInited" that will make it clear what it attempts to do.  
The side effect invalidating the cache can be checked after it's called 
and no need to worry about lookupCacheEnabled must be checked in any 
order.  Something like this

  if (cache != null && cache.length > 0) {
     int maxindex = cache[cache.length - 1];
     ensureLoaderOpened(maxindex);
     if (loaders.get(maxindex) == null || !lookupCacheEnabled) {
         if (DEBUG_LOOKUP_CACHE) {
            System.out.println("Expanded loaders FAILED " +
                                loaders.size() + " for maxindex=" + maxindex);
         }
         return null;
     }
     ...
  }
  return cache;


The code is getting further complicated with this lookup cache and bear 
with me for being picky.

> if (loaders.size() <= maxindex) {
>                 boolean failed = false;
>
>                 // Call getNextLoader() with a null cache to open all
>                 // Loaders up to, and including, maxindex.
>                 if (getNextLoader(null, maxindex) == null) {

Can this call getLoader(maxindex)?  They are essentially the same.
I think getLoader(maxindex) makes it explicit that it forces to
open the loader.

Mandy



More information about the core-libs-dev mailing list