1. Обзор
При отсутствии необходимых синхронизаций компилятор, среда выполнения или процессоры могут применять всевозможные оптимизации. Несмотря на то, что эти оптимизации в большинстве случаев полезны, иногда они могут вызывать тонкие проблемы.
Кэширование и переупорядочивание относятся к числу тех оптимизаций, которые могут удивить нас в параллельных контекстах. Java и JVM предоставляют множество способов управления порядком памяти , и ключевое слово volatile
— один из них.
В этой статье мы сосредоточимся на фундаментальном, но часто неправильно понимаемом понятии языка Java — ключевом слове volatile .
Во-первых, мы начнем с небольшого предыстории того, как работает базовая компьютерная архитектура, а затем познакомимся с порядком памяти в Java.
2. Общая многопроцессорная архитектура