Модель памяти Java (JMM, Java Memory Model)
Модель памяти Java, используемая внутри JVM, разделяет память между стеками потоков и кучей (heap). Каждый поток, выполняющийся в виртуальной машине Java, имеет свой собственный стек потока. Стек потока содержит информацию о том, какие методы вызвал поток для достижения текущей точки выполнения.
Стек потока также содержит все локальные переменные для каждого выполняемого метода (все методы в стеке вызовов). Поток может получить доступ только к своему собственному стеку потока. Локальные переменные, созданные потоком, невидимы для всех других потоков, кроме потока, который его создал. Даже если два потока выполняют один и тот же код, два потока все равно будут создавать локальные переменные этого кода в своем собственном стеке потока. Таким образом, каждый поток имеет свою версию каждой локальной переменной.
Все локальные переменные примитивных типов (boolean, byte, short, char, int, long, float, double) полностью хранятся в стеке потока и поэтому не видны другим потокам. Один поток может передать копию приоритетной переменной другому потоку, но не может совместно использовать саму примитивную локальную переменную.
Куча (heap) содержит все объекты, созданные в вашем приложении Java, независимо от того, какой поток создал объект. Сюда входят версии объектов примитивных типов (например, Byte, Integer, Long и т. д.). Не имеет значения, был ли объект создан и назначен локальной переменной или создан как переменная-член другого объекта, объект по-прежнему сохраняется в куче.
Читайте также:
- Сборщики мусора в Java
- Основные опции JVM для повышения производительности и отладки
- Как работает JVM
Комментарии
Отправить комментарий