Распределение памяти Java (Stack) для локальных переменных
Я изучаю Java, и сейчас я застрял в распределении памяти объекта и локальных переменных. Можно ли проиллюстрировать или прояснить некоторые мои сомнения?
- Я читал о памяти кучи и стека для экземпляра объекта и локальных переменных. У меня есть вопрос, создается ли новый STACK для каждого метода? или для каждого класса один стек используется целым классом??
- Я читал, что ОДИН СТЕК создается каждым потоком Что означает
Спасибо Махавир
Ответы
Ответ 1
- Каждый поток имеет отдельный стек.
- Каждый метод имеет отдельный стек стека внутри этого потока.
Стеки связаны с потоком в сопоставлении "один к одному". Стеки абсолютно не связаны с методами и классами.
Способ рассуждать обо всем этом состоит в том, что локальные переменные метода являются частными для каждого вызова этого метода.
Ответ 2
Каждый поток имеет собственный стек.
- Всякий раз, когда вы используете
new
, объект создается в куче.
- Локальные переменные хранятся в стеке. Это включает примитивы (например,
int
) и ссылки для любых созданных объектов. Фактические объекты сами не создаются в стеке, как я упоминал, когда вы используете new
, они будут созданы в куче.
У меня вопрос, что погода создает новый STACK для каждого Метод??
Тот же самый стек используется при вызове метода. Метод создаст его собственный небольшой раздел в стеке, называемый "стек стека", который использовал для хранения локальных переменных.
Это точно так же, как стопка пластин, когда метод называется пластиной, добавляется в верхнюю часть стека (фрейм стека), и когда этот метод заканчивается, пластина удаляется из стека. Все локальные переменные этого метода будут уничтожены вместе с ним, но фактические объекты, созданные с помощью new
, не будут.
Сборщик мусора JVM будет следить за уничтожением объектов в куче (созданной с помощью new
), когда увидит, что вы больше не нуждаетесь в них.
Ответ 3
Конечно, сборщик мусора java всегда заботится о куче, когда он получает шанс на выполнение, поэтому он только ищет объекты-сироты и вытирает их, поэтому ключевое слово NEW в Java всегда создает новые объекты в памяти кучи,