On 02/18/2015 10:01 AM, Andrew Dinn wrote: > On 17/02/15 19:21, Vitaly Davidovich wrote: >> IMO I don't think such barriers should be removed just because EA is able >> to elide the heap allocation. > > Why not? Are you assuming that the programmer might be relying on a > memory barrier being implied in interpreted/JITted code by the presence > in the source of an allocation? If so then I am not sure the Java memory > model justifies that assumption, especially so in the case EA optimises.
It doesn't. There are essentially two ways to prevent unsafe publication of objects with final fields: either emit a barrier at the end of the constructor or track the reference to the newly-constructed object until it is stored in memory. That store to memory can be a releasing store. If the object does not escape that releasing store can be eliminated. Andrew.