RFR(M): 8080289: Intermediate writes in a loop not eliminated by optimizer

John Rose john.r.rose at oracle.com
Wed Jun 17 19:44:55 UTC 2015


On Jun 17, 2015, at 12:39 PM, Vitaly Davidovich <vitalyd at gmail.com> wrote:
> 
> But happens-before is meaningful only for inter-thread communication.  If we're talking about plain stores with no fences (or let's say, JMM happens-before inducing points in between them), then as long as intra-thread semantics aren't violated, I'd say anything's on the table :).

Nope, that's an oversimplified understanding.  One place where the JMM will bite you is with publication of object state via final fields. Normal stores used to initialize a structure which is published via final-field semantics must be ordered to take place before the object is published.  We don't (and perhaps can't) track object publication events, nor their relation to stores into newly-reachable subgraphs.  Instead, we have fences that gently but firmly ensure that data (from normal stores, even to non-final fields and array elements!) is posted to memory before any store which could be a publishing store for that data.

> Will this risk uncovering broken user code? Yes, but that code is a ticking time bomb anyway (and subject to CPU reordering as well).

Indeed.  We live in a world of ticking time bombs.  Some of them are our problem even if we didn't cause them.

I don't mind uncovering broken user code; sooner is better.  But that user will want (as a matter of QOS) a range of workarounds.

— John
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20150617/2f85248b/attachment.html>


More information about the hotspot-compiler-dev mailing list