Relaxed Memory Model Zoo

Memory model
← Back to the map

Java Access Modes JAM

2019 · Bender, Palsberg · language, formal

A formalisation of a revised Java Memory Model built on the 'Java Access Modes' (plain, opaque, release/acquire, volatile) introduced with VarHandles in JDK 9. Inspired by RC11, it adopts RC11's solution to the out-of-thin-air problem and forbids load/store reorderings for opaque or stronger accesses, but it deliberately does not tackle thin-air on the level of plain (non-atomic) accesses.

Ordering relationships

Strictly weaker than
  • Repaired C11 (RC11) — JAM borrows RC11's OOTA fix for opaque and stronger accesses, but unlike RC11 it does not tackle thin-air for plain (non-atomic) accesses, so it permits more behaviours.
Incomparable with
  • Java Memory Model (JMM) — JAM is a proposed revision of the JMM built on VarHandle access modes (plain/opaque/release-acquire/volatile); it strengthens the treatment of atomics via RC11 while differing from the original JMM's causality machinery, so neither contains the other.

References

  • John Bender, Jens Palsberg. A Formalization of Java's Concurrent Access Modes. OOPSLA 2019 (PACMPL vol. 3), 2019. doi:10.1145/3360568
  • Evgenii Moiseenko, Anton Podkopaev, Dmitrii Koznov. A Survey of Programming Language Memory Models. Programming and Computer Software 47(6), pp. 439–456, 2021. doi:10.1134/S0361768821060050