Распределение памяти Java (Stack) для локальных переменных

Я изучаю Java, и сейчас я застрял в распределении памяти объекта и локальных переменных. Можно ли проиллюстрировать или прояснить некоторые мои сомнения?

  1. Я читал о памяти кучи и стека для экземпляра объекта и локальных переменных. У меня есть вопрос, создается ли новый STACK для каждого метода? или для каждого класса один стек используется целым классом??
  2. Я читал, что ОДИН СТЕК создается каждым потоком Что означает

Спасибо Махавир

Ответ 1

  • Каждый поток имеет отдельный стек.
  • Каждый метод имеет отдельный стек стека внутри этого потока.

Стеки связаны с потоком в сопоставлении "один к одному". Стеки абсолютно не связаны с методами и классами.

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

Ответ 2

Каждый поток имеет собственный стек.

  • Всякий раз, когда вы используете new, объект создается в куче.
  • Локальные переменные хранятся в стеке. Это включает примитивы (например, int) и ссылки для любых созданных объектов. Фактические объекты сами не создаются в стеке, как я упоминал, когда вы используете new, они будут созданы в куче.

У меня вопрос, что погода создает новый STACK для каждого Метод??

Тот же самый стек используется при вызове метода. Метод создаст его собственный небольшой раздел в стеке, называемый "стек стека", который использовал для хранения локальных переменных.

Это точно так же, как стопка пластин, когда метод называется пластиной, добавляется в верхнюю часть стека (фрейм стека), и когда этот метод заканчивается, пластина удаляется из стека. Все локальные переменные этого метода будут уничтожены вместе с ним, но фактические объекты, созданные с помощью new, не будут.

Сборщик мусора JVM будет следить за уничтожением объектов в куче (созданной с помощью new), когда увидит, что вы больше не нуждаетесь в них.

Ответ 3

Конечно, сборщик мусора java всегда заботится о куче, когда он получает шанс на выполнение, поэтому он только ищет объекты-сироты и вытирает их, поэтому ключевое слово NEW в Java всегда создает новые объекты в памяти кучи,