Particionamento de memória Java:
Na alocação de memória Java, Java divide a memória em: área de método, heap, pilha de máquina virtual, pilha de método local e contador de programa. A área do método e o heap são compartilhados por todos os threads, enquanto a pilha da máquina virtual, a pilha do método local e o contador do programa são isolados por thread. Cada área tem seu próprio tempo de criação e destruição.
Contador de programa:
É usado como um indicador do número de linha dos bytes executados pelo thread atual. O multithreading do Java é implementado alternando os threads e alocando o tempo de execução do processador. Portanto, para que cada thread retorne à sua posição correta após a comutação, cada thread precisa de um contador de programa independente.
Pilha de máquina virtual Java:
Quando cada um for executado, um quadro de pilha será criado ao mesmo tempo para armazenar tabelas de variáveis locais, pilhas de operandos, links dinâmicos, saídas de métodos e outras informações. A pilha de memória virtual é o que costumamos chamar de “pilha”. A memória necessária para a tabela de variáveis locais é alocada em tempo de compilação.
Pilha de métodos locais:
Semelhante à pilha de máquinas virtuais, a diferença é que a pilha de máquinas virtuais executa serviços de métodos Java para a máquina virtual, enquanto a pilha de métodos locais atende a máquina virtual usando métodos nativos.
Pilha Java:
Compartilhado por todos os programas e criado quando a máquina virtual é iniciada. Esta área de memória é usada para armazenar instâncias de objetos. De acordo com os regulamentos da máquina virtual Java, o heap Java pode estar em um espaço de memória fisicamente descontínuo, desde que seja logicamente contínuo.
Área de método:
Igual ao heap, compartilhado entre threads. Sua função é armazenar dados como informações de classe, constantes, variáveis estáticas, código compilado pelo compilador just-in-time, etc., que foram carregados pela máquina virtual.
Conjunto de constantes de tempo de execução:
Faz parte da área de métodos. Sua função é armazenar diversas referências literais e simbólicas geradas durante a compilação.