Упоминая память в Java, многие люди думают о JVM. Модель памяти, обсуждаемая в этой статье, также будет неправильно понята. По сути, это еще и тестовая точка, из-за которой вероятность ошибок на собеседовании выше. Аббревиатура модели памяти — jmm. Думаю, ее будет нелегко спутать, если она будет отображаться на английском языке. Ниже мы объясним концепцию модели памяти Java и поможем вам отличить ее от jvm.
1. Концепция
Модель памяти Java (Java Main Memory, сокращенно JMM) — это абстрактное понятие, имеющее много общего с моделью памяти компьютера. JMM в основном включает в себя потоки, рабочую память и основную память для взаимодействия. Рабочую память можно сравнить с кэшем вычислений, но рабочая память между потоками не зависит друг от друга и аналогична основной памяти компьютера. , а передача значений переменных между потоками в основном осуществляется через основную память. В то же время в JMM также имеется переупорядочение инструкций для оптимизации порядка выполнения кода. Проще говоря, порядок написания кода не обязательно совпадает с порядком его выполнения.
2. Разница между JMM и JVM
Модель памяти Java похожа на структуру памяти Java (структура памяти JVM). Многие ошибочно полагают, что это одно и то же, что часто приводит к неправильным ответам в процессе собеседования.
Куча и область методов Java — это области данных, совместно используемые несколькими потоками. Другими словами, несколько потоков могут работать с одними и теми же данными, хранящимися в куче или области метода. Это то, что мы часто называем «потоки Java взаимодействуют через общую память».
Модель памяти Java переведена с английской модели памяти Java (JMM). На самом деле JMM не существует так же реально, как структура памяти JVM. Это просто абстрактное понятие. JSR-133: Модель памяти и спецификация потока Java описывает, что JMM связана с многопоточностью. Эта спецификация определяет, что когда один поток записывает в общую переменную, она видна другому потоку. .
Итак, подводя краткий итог, многопотоки Java взаимодействуют через общую память, и из-за использования общей памяти для связи возникнет ряд проблем, таких как видимость, атомарность, порядок и т. д. во время процесса связи, а также JMM. Это модель, построенная на многопоточной связи и ряде связанных с ней функций. JMM определяет некоторые наборы синтаксиса, которые сопоставляются с такими ключевыми словами, как Летучий и Синхронизированный, в языке Java.
Вышеизложенное представляет собой введение в модель памяти в Java. Эта статья посвящена изложению базовой теории. Вы можете сосредоточиться на различении jmm и jvm, и вы сможете более четко понимать эти две концепции при изучении в будущем .