On 15 Dec 2021, at 15:06, Brian Goetz wrote:

It took us a while to unravel this one, but I think we did.
… What this says is that tearing/non-tearing is a property of reference-vs-primitive-ness; accessing a (fat) value through a reference gives you *more guarantees* than accessing it directly. (Correspondingly, this has more costs.)

All of this is to say, as I think you are saying: primitives of a certain size were always tearable, and they still are; references never were, and they are still not.

Of course references don’t tear, and more to the point, `final` fields reached by references also don’t tear, because they are (a) safely published and (b) never mutated after publication. So, as Brian says, wrapping a reference around some chunks of state has a special benefit (as well as a special cost). The reference wrapper freezes those chunks in place, relative to each other.

Reply via email to