15 Расскажите о Java Memory Model какая есть память, какая для чего используется, доступ при многопоточности.

Java Memory Model (JMM) описывает, как потоки взаимодействуют через память и как данные видны между потоками. Основные аспекты:

  1. Память:
  2. Heap (куча): используется для хранения объектов и массивов. Динамическое выделение памяти.
  3. Stack (стек): используется для хранения локальных переменных и вызовов методов. Каждый поток имеет свой стек.
  4. Method Area (область методов): хранит метаданные классов, статические переменные и константы.

  5. Доступ при многопоточности:

  6. Синхронизация: для обеспечения безопасного доступа к общим данным используются ключевые слова synchronized и volatile.
  7. Happens-Before: правила, определяющие порядок видимости изменений между потоками. Например, запись в volatile переменную гарантирует, что изменения будут видны другим потокам.

Эти механизмы помогают избежать проблем, таких как гонки данных и несогласованность состояния.