RFR: 8062771: Core reflection should use final fields whenever possible
Aleksey Shipilev
aleksey.shipilev at oracle.com
Tue Nov 4 20:34:22 UTC 2014
Hi Martin,
On 04.11.2014 23:11, Martin Buchholz wrote:
> On Tue, Nov 4, 2014 at 11:55 AM, Aleksey Shipilev
> <aleksey.shipilev at oracle.com> wrote:
>> On 04.11.2014 20:53, Martin Buchholz wrote:
>>> On Tue, Nov 4, 2014 at 2:13 AM, Paul Sandoz <paul.sandoz at oracle.com> wrote:
>>>> On Nov 3, 2014, at 11:18 PM, Martin Buchholz <martinrb at google.com> wrote:
>> If you do this:
>>
>>> // Generic info repository; lazily initialized
>>> - private transient ClassRepository genericInfo;
>>> + private volatile transient ClassRepository genericInfo;
>>
>> ...you don't need to do this for correctness (but may do for performance
>> -- avoidable volatile read for ARM/PPC):
>
> It's just reflex to always read volatiles into locals - never hurts,
> except the line-of-code count.
No objection here :) Current JDK 9 code also does this.
I think we can make a partial backport of JDK-8016236 to jdk7, since
this volatile construction fixes the obvious bug, and the fix was tested
already in JDK 8 and 9. Can anyone from Core Libraries team attend to this?
>> Also, I wonder if we need a singleton ClassRepository instance, or we
>> can tolerate two different ClassRepository-ies returned under concurrent
>> init.
>
> Yeah, me too. But the existing code has this behavior as well. One
> could fix it if needed with double-checked-locking or whatever our
> fancy new volatile unsafe-less cas ends up looking like.
All right, ClassRepository seems to be an innocuous idempotent cache. Do
not need double-checked locking here.
-Aleksey.
More information about the core-libs-dev
mailing list