Gerenciamento de pilha e pilha de Java em Java

Quero saber como a memória está sendo alocada no seguinte 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!";

    }

}

Agora, na minha opinião, o diagrama a seguir descreve como a alocação de memória ocorre:


No diagrama acima,memória,obj es, que estão na memória da pilha, são na verdade as referências a seus "objetos reais"que são colocados dentro da memória heap.
Aqui está o conjunto de perguntas que me vêm à mente:

Onde estão os métodos des armazenado?Se eu tivesse criado outro objeto deMemoryClass dentromyMethod, a JVM alocaria memória para os mesmos métodos novamente dentro da memória da pilha?A JVM liberaria a memória alocada paramyMethod assim que sua execução for concluída, em caso afirmativo, como gerenciaria a situação mencionada na pergunta 2 (aplicável apenas se a JVM alocar memória várias vezes para o mesmo método)Qual teria sido o caso, se eu tivesse declarados e não inicializou, a JVM ainda alocaria memória para todos os métodos dejava.lang.String classe, se sim, por quê?