Relaxed Memory Model Zoo

Java Access Modes (JAM)
← Back to the map

Java Access Modes JAM

2019 · Bender, Palsberg · language, formal · axiomatic formalism

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.

Properties

Property vector survey-sourced — from Tables 1–2 of the Moiseenko et al. survey, except cells that cite a specific source.

Compilation optimal mapping to
  • yes x86
  • no POWER
  • no Armv7
  • no Armv8
Other local transformations
  • yes Strengthening
  • no Common subexpr. elim.
Reasoning guarantees
  • yes External DRF
  • yes Coherence
  • yes No undefined behaviour
  • yes In-order execution
  • yes No out-of-thin-air

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