Управление стеком Java и кучей памяти

Я хочу знать, как распределяется память в следующей программе:

public class MemoryClass {

    public static void main(final String[] args) {
        int i = 0;
        MemoryClass memoryClass = new MemoryClass();
        memoryClass.myMethod(memoryClass);
    }

    private void myMethod(final Object obj) {
        int i = 1;
        String s = "HelloWorld!";

    }

}

Теперь, насколько я понимаю, следующая диаграмма описывает, как происходит распределение памяти:


На приведенной выше диаграммеобъем памяти,OBJ а такжеs, которые находятся в стеке памяти, на самом деле являются ссылками на ихактуальные объекты"которые находятся внутри кучи памяти.
Вот набор вопросов, которые приходят мне в голову:

Где методыs хранится?Если бы я создал еще один объектMemoryClass внутриmyMethodJVM будет выделять память для тех же методов снова в памяти стека?Освободит ли JVM память, выделенную дляmyMethod как только его выполнение будет завершено, если так, как он будет управлять ситуацией, упомянутой в вопросе 2 (применимо, только если JVM выделяет память несколько раз одному и тому же методу).Что было бы, если бы я только объявилs и не инициализировать его, будет ли JVM по-прежнему выделять память для всех методовjava.lang.String класс, если так, почему?

Ответы на вопрос(3)

Ваш ответ на вопрос