Os campos de instância (incluindo campos de propriedade) recebem N-cópias para N-objetos.
Os campos estáticos recebem uma única cópia por classe.
Métodos são blocos de bytecode (ou após JIT, blocos de instruções nativas) que fazem parte da "imagem" do programa ou do segmento de código executável. Os métodos já fazem parte da imagem do programa, pois fica no disco. Depois que a imagem é carregada pelo sistema operacional (ou CLR), há uma única cópia compartilhada do código do método.
Eles não fazem parte da "pilha" ou da alocação de tempo de execução em geral, exceto nos casos em que você pode usar o compilador hostável para compilar novos métodos em tempo real. Os métodos não são "alocados" como objetos e não são "alocados" em relação à criação do objeto. Eles meramente existem como parte do programa antes que um único objeto seja instanciado. Mesmo lambdas / delegados não são alocados em tempo real. O compilador cria classes sob demanda para implementar esses outros objetos de código aparentemente dinâmicos e eles também existem como parte da imagem do bytecode no disco.
ATUALIZAÇÕES por comentários:
O padrão da JVM tem o seguinte a dizer:
2.5.4 Área do método
A Java Virtual Machine possui uma área de método compartilhada entre todos os encadeamentos da Java Virtual Machine. A área do método é análoga à área de armazenamento para código compilado de uma linguagem convencional ou análoga ao segmento "texto" em um processo do sistema operacional. Ele armazena estruturas por classe, como o pool constante em tempo de execução, dados de campo e método, e o código para métodos e construtores, incluindo os métodos especiais (§2.9) usados na inicialização de classes e instâncias e na interface.
A área do método é criada na inicialização da máquina virtual. Embora a área do método faça parte logicamente do heap, implementações simples podem optar por não coletar ou compactar o lixo. Esta versão da especificação Java Virtual Machine não determina o local da área de método ou as políticas usadas para gerenciar o código compilado. A área do método pode ter um tamanho fixo ou pode ser expandida conforme exigido pelo cálculo e pode ser contratada se uma área maior do método se tornar desnecessária. A memória da área do método não precisa ser contígua.
Portanto, é claro que (1) sim, a especificação não determina como isso é feito, mas (2) é análogo à área de armazenamento para código compilado de uma linguagem convencional, ou seja. o segmento de texto. Este é o ponto que estou afirmando.