[jmm-dev] easily observable examples of non-sc behaviours in Java

Aleksey Shipilev aleksey.shipilev at oracle.com
Thu Jan 15 19:22:03 UTC 2015


On 01/15/2015 10:07 PM, Hans Boehm wrote:
> A similar, though somewhat simpler and more standard, example seems to be
> 
> while (!flag) {}
> 
> getting optimized to tmp = flag; while(!tmp) {}
> 
> I have no idea which JVMs currently do that, but it seems to me that they
> should.

Hotspot does this routinely. This opens up an interesting class of bugs:
busy-waiting on some condition may stuck indefinitely. This is
especially "fun" in intrinsics, e.g. these two interesting bugs:

 a) busy-waiting on Reference.get(): Hotspot intrinsifies the call, but
forgets the barrier, loop optimizations then move out the predicate out
of the loop, boom: https://bugs.openjdk.java.net/browse/JDK-7190310

 b) busy-waiting on Thread.currentThread().isInterrupted(): same thing,
but amusingly only in OSR stub, boom:
https://bugs.openjdk.java.net/browse/JDK-8003135

I think both are observable on 7u4 or lower.

Thanks,
-Aleksey.




More information about the jmm-dev mailing list