On 10/24/14, 3:45 AM, Claes Redestad wrote:
On 10/24/2014 06:34 AM, Ioi Lam wrote:
Can lookupCacheEnabled flag change during runtime? In getLookupCache() the flag is checked more than once.

Yes, it can change if disableAllLookupCaches() is called in the middle of getLookupCache(). I have added more comments in the new webrev. Please take a look to see if it makes sense.

http://cr.openjdk.java.net/~iklam/8061651-lookup-index-open-v2/

What is the reason to have lookupCacheEnabled disabled globally when for example calling addURL on *any* URLClassLoader? Couldn't the disabling of cache lookups be per URLClassPath rather than global?

/Claes
Claes,

Thanks for pointing that out. Here's the new code

    public synchronized void addURL(URL url) {
        if (closed)
            return;
        synchronized (urls) {
            if (url == null || path.contains(url))
                return;

            urls.add(0, url);
            path.add(url);
+
+           if (lookupCacheURLs != null) {
+ // The lookup cache is no longer valid, since getLookupCache()
+               // does not consider the newly added url.
+               disableAllLookupCaches();
+           }
        }
    }


There are dependencies in the caches: Currently the cache is supported only for the boot, ext and app loaders. If the boot classpath is appended via addURL, then we need to disable the caches for ext and app loaders as well.

If the app classpath is appended, then there's no need to disable the boot or ext caches. However, the app lookup cache is typically the largest, so keeping the other two caches alive don't buy you that much. So instead of trying to do it "right", I decided to go for simplicity. If any one of the 3 loaders are changed, I disable the cache.

URLClassLoaders that are not these 3 loaders won't cause the cache to be disabled.

Thanks
- Ioi


Reply via email to