RFR: 8166842: String.hashCode() has a non-benign data race
Andrew Haley
aph at redhat.com
Thu Sep 29 08:59:30 UTC 2016
On 29/09/16 05:31, David Holmes wrote:
>
> On 29/09/2016 10:49 AM, Carsten Varming wrote:
>> Because String has final fields there is a freeze action at the end
>> of construction so that String instances are always safely published
>> even if not "safely published".
>>
>>
>> I always thought that the freeze action only freezes final fields. The
>> hash field in String is not final and example 17.5-1 is applicable as
>> far as I can see
>> (https://docs.oracle.com/javase/specs/jls/se8/html/jls-17.html#jls-17.5). Has
>> the memory model changed in JDK9 to invalidate example 17.5-1 or I am
>> missing something about String.
>
> Sorry - I was confusing what the spec says versus what the VM actually
> does - as Vitaly pointed out.
A HotSpot back end could rewrite the constructor so that the last
final field to be written used a store release instruction. Whether
it should is another matter: I suppose it would be rather risky.
Andrew.
More information about the core-libs-dev
mailing list