[9] RFR: 8171139: Simplify ResourceBundle.CacheKey and ClassLoader may not be needed

Naoto Sato naoto.sato at oracle.com
Sat Jan 14 00:05:45 UTC 2017


Thank you again, Daniel & Mandy.

On 1/13/17 1:25 PM, Mandy Chung wrote:
>
>> On Jan 12, 2017, at 1:20 PM, Naoto Sato <naoto.sato at oracle.com> wrote:
>>
>> Realized moduleRef & callerRef would never be null with this new version. Thus modified the patch as:
>>
>> http://cr.openjdk.java.net/~naoto/8171139/webrev.03/
>
> CacheKey
>    Nit: line 576 can be moved after 581 to group the volatile fields together

As in the comment line 574, the first 4 fields are the actual keys for 
lookup, so I'd keep them that way.

>
>  619             this(src.getName(), src.getLocale(), src.getModule(), src.getCallerModule());
>
> Daniel asks whether there is any possibility that the target module or caller module would be GC’ed.
>
> CacheKey is copied in two places, one in findBundle and the other is putBundleInCache which is actually passed with a newly cloned CacheKey.  IIUC, the cacheKey passed to findBundle ia always a new instance (as it subsequently sets to different locale during the lookup).  Its caller module is the caller on the stack and the target module is also a strong reference either caller’s module, unnamed module from a given class loader, or a given module.
>
> Naoto will have to double check.

I think this is correct. The current way of using CacheKey is safe from 
its modules to be GC'ed. However in general, it'd be good prepare them 
to be GC'ed. I modified the impl to hold them in local variables 
preventing them to be GC'ed before instantiating new References. (Also I 
modified not to call the other constructor in the copy constructor, 
reinstating some piece what Peter's diff originally had). So here is the 
updated webrev:

http://cr.openjdk.java.net/~naoto/8171139/webrev.04/

Naoto


More information about the core-libs-dev mailing list