Управление стеком 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, которые находятся в стеке памяти, на самом деле являются ссылками на ихактуальные объекты"которые находятся внутри кучи памяти.
Вот набор вопросов, которые приходят мне в голову:
MemoryClass
внутриmyMethod
JVM будет выделять память для тех же методов снова в памяти стека?Освободит ли JVM память, выделенную дляmyMethod
как только его выполнение будет завершено, если так, как он будет управлять ситуацией, упомянутой в вопросе 2 (применимо, только если JVM выделяет память несколько раз одному и тому же методу).Что было бы, если бы я только объявилs и не инициализировать его, будет ли JVM по-прежнему выделять память для всех методовjava.lang.String
класс, если так, почему?