Java stack y gestión de memoria heap

Quiero saber cómo se asigna la memoria en el siguiente programa:

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!";

    }

}

Ahora, hasta donde tengo entendido, el siguiente diagrama describe cómo se lleva a cabo la asignación de memoria:


En el diagrama de arriba,memoria,obj ys, que están en la memoria de la pila, son en realidad las referencias a su "objetos reales"que se colocan dentro de la memoria del montón.
Aquí está el conjunto de preguntas que me vienen a la mente:

¿Dónde están los métodos des almacenado?Si hubiera creado otro objeto deMemoryClass dentromyMethod, ¿JVM asignaría memoria para los mismos métodos nuevamente dentro de la memoria de pila?¿JVM liberaría la memoria asignada amyMethod tan pronto como se complete su ejecución, de ser así, ¿cómo manejaría la situación mencionada en la pregunta 2 (solo aplicable si JVM asigna memoria varias veces al mismo método)¿Cuál hubiera sido el caso si solo hubiera declarados y no lo inicializó, JVM aún asignaría memoria a todos los métodos dejava.lang.String clase, si es así, ¿por qué?

Respuestas a la pregunta(3)

Su respuesta a la pregunta