15 Расскажите о Java Memory Model какая есть память, какая для чего используется, доступ при многопоточности.
Java Memory Model (JMM) описывает, как потоки взаимодействуют через память и как данные видны между потоками. Основные аспекты:
- Память:
- Heap (куча): используется для хранения объектов и массивов. Динамическое выделение памяти.
- Stack (стек): используется для хранения локальных переменных и вызовов методов. Каждый поток имеет свой стек.
-
Method Area (область методов): хранит метаданные классов, статические переменные и константы.
-
Доступ при многопоточности:
- Синхронизация: для обеспечения безопасного доступа к общим данным используются ключевые слова
synchronized
иvolatile
. - Happens-Before: правила, определяющие порядок видимости изменений между потоками. Например, запись в
volatile
переменную гарантирует, что изменения будут видны другим потокам.
Эти механизмы помогают избежать проблем, таких как гонки данных и несогласованность состояния.