[10] RFR: 8184603: Create ObjectStreamField signature lazily when possible

Aleksey Shipilev shade at redhat.com
Fri Jul 14 13:33:56 UTC 2017


On 07/14/2017 03:25 PM, Aleksey Shipilev wrote:
> On 07/14/2017 02:47 PM, Claes Redestad wrote:
>>> For extra points remove the superfluous null assignment of
>>> `signature` and `field` ( as well as `offset` ).
>>
>> 'field' is final so that'd make javac cry bloody murder, but I fixed the
>> rest and cleaned up a bit for consistency:
>>
>> http://cr.openjdk.java.net/~redestad/8184603/jdk.01/
> 
> Can you also not do $signature field "volatile", for the sake on non-x86
> platforms? I think getSignature() has a benign race then, which is safe.

Hm, there is ObjectStreamField(String name, String signature, boolean unshared)
constructor that passes naked signature.

There are two issues here:
  a) getSignature() would now ignore the signature passed via that constructor,
because it will redo the signature from $type field, which is initialized to
Object.class for references;
  b) neither volatile nor blank qualifier would help to survive the racy read of
OSF.signature field if OSF was initialized with that private constructor.

I guess careful inspection of that constructor uses would tame these problems.

-Aleksey



More information about the core-libs-dev mailing list