Java Memory Model (JMM), разработанная в ранних версиях языка Java, в том числе в 1995 году, решала проблемы, связанные с производительностью и синхронизацией потоков. 12
Некоторые из проблем:
- Изменение порядка операций. 34 Для повышения производительности компилятор, процессор и подсистема памяти могли переупорядочивать код. 12 Если операции в многопоточной среде выполнялись в другом порядке, логика программы могла быть нарушена. 4
- Несинхронность кэшей. 12 На многопроцессорных машинах у разных процессоров могли быть одновременно разные значения одной и той же переменной. 2
- Сложности с оптимизацией. 15 Некоторые оптимизации было невозможно провести, не потеряв гарантию безопасности кода. 2
JMM определяла, когда и в каком порядке один поток видел изменения, внесённые другим, а также какие операции можно оптимизировать и в каких случаях. 4