[9] RFR(L) 8013267 : move MemberNameTable from native code to Java heap, use to intern MemberNames
David Holmes
david.holmes at oracle.com
Mon Nov 3 03:49:45 UTC 2014
On 3/11/2014 10:05 AM, David Chase wrote:
>
> On 2014-10-31, at 5:45 PM, Vitaly Davidovich <vitalyd at gmail.com> wrote:
>
>> The volatile load prevents subsequent loads and stores from reordering with it, but that doesn't stop C from moving before the B store. So breaking B into the load (call it BL) and store (BS) you can still get this ordering: A, BL, C, BS
>
> I think this should do the trick.
>
> element_data[oldCapacity] = element_data[oldCapacity - 1];
> // all array elements are non-null and sorted, increase size.
> // if store to element_data above floats below
> // store to size on the next line, that will be
> // inconsistent to the VM if a safepoint occurs here.
> size += 1;
> // Load of volatile size prevents movement of element_data store
> for (int i = size - 1; i > index; i--) {
>
> The change is to load the volatile size for the loop bound; this stops the stores
> in the loop from moving earlier, right?
Treating volatile accesses like memory barriers is playing a bit
fast-and-loose with the spec+implementation. The basic happens-before
relationship for volatiles states that if a volatile read sees a value
X, then the volatile write that wrote X happened-before the read [1].
But in this code there are no checks of the values of the volatile
fields. Instead you are relying on a volatile read "acting like
acquire()" and a volatile write "acting like release()".
That said you are trying to "synchronize" the hotspot code with the JDK
code so you have stepped outside the JMM in any case and reasoning about
what is and is not allowed is somewhat moot - unless the hotspot code
always uses Java-style accesses to the Java-level variables.
BTW the Java side of this needs to be reviewed on
core-libs-dev at openjdk.java.net
David H.
[1] http://docs.oracle.com/javase/specs/jls/se8/html/jls-17.html#jls-17.4.4
> David
>
More information about the hotspot-compiler-dev
mailing list