RFR: 8060130: Simplify the synchronization of defining and getting java.lang.Package

Peter Levart peter.levart at gmail.com
Sun Oct 12 11:02:44 UTC 2014

On 10/12/2014 12:52 PM, Peter Levart wrote:
> On 10/12/2014 12:40 PM, Peter Levart wrote:
>> I also wonder if the lazy loading of Manifest in CachedManifest is 
>> necessary. If you look at the only usage of 
>> CachedManifest.getManifest() method (in Package.defineSystemPackage()):
>>         CachedManifest cachedManifest = createCachedManifest(fn);
>>         pkgs.putIfAbsent(name, new Package(name, 
>> cachedManifest.getManifest(),
>>                 cachedManifest.getURL()));
>> ...you can see that getManifest() is called immediately after 
>> obtaining the CacheManifest.  So there's no need for lazy loading. 
>> Loading the Manifest in CachedManifest constructor would be just fine.
> ..Ah, you can do that, yes, but then you have to use synchronization 
> in createCachedManifest in order to avoid redundant concurrent loading 
> of Manifest. And that would be a good thing since then you avoid 
> concurrent resolving of fileName -> URL too in one go.
> Peter

Scrap that. I see now what you wanted to achieve. You wanted to avoid 
synchronization on a single monitor when loading manifests while 
avoiding multiple concurrent loading of same manifest. Lazy loading is 
fine than.

Regards, Peter

More information about the core-libs-dev mailing list