Conhecimento aprofundado do mecanismo de execução de bytecode da máquina virtual Java Second Edition (oito) máquinas virtuais

 

1. Visão geral

Em diferentes implementações de máquinas virtuais, quando o mecanismo de execução executa o código Java, pode haver duas opções: execução interpretada (executada pelo intérprete) e execução compilada (gerada pelo compilador instantâneo para gerar código local).

 

2. Estrutura do quadro da pilha de tempo de execução

Um quadro de pilha (Frame de pilha) é uma estrutura de dados usada para dar suporte à invocação e execução de métodos de uma máquina virtual.É um elemento de pilha de uma pilha de máquina virtual (Pilha de Máquina Virtual) em uma área de dados de uma máquina virtual em tempo de execução.

O quadro da pilha inclui a tabela de variáveis ​​locais, a pilha de operandos, o link dinâmico, o endereço de retorno do método e algumas informações adicionais.

 

 

 3. Chamada de método

A única tarefa na fase de chamada do método é determinar a versão do método chamado (ou seja, qual método chamar).

O método de destino em todas as chamadas de método é uma referência de símbolo em um pool constante no arquivo Class. Durante o estágio de resolução do carregamento da classe, algumas das referências de símbolo serão convertidas em referências diretas

O método possui uma versão de chamada definitiva antes da execução do programa e a versão de chamada deste método não pode ser alterada durante o tempo de execução.

3.1 Análise

O destino da chamada deve ser determinado quando o código do programa é gravado e o compilador é compilado. Esse tipo de chamada de método é chamado Resolução

A chamada de resolução deve ser um processo estático. É completamente determinada durante a compilação. Durante a fase de resolução do carregamento da classe, todos os símbolos referenciados serão convertidos em referências diretas determináveis ​​e não serão adiados até que o tempo de execução seja concluído.

A máquina virtual Java fornece cinco métodos para chamar instruções de bytecode:

  • invokestatic: chame um método estático.
  • invokespecial: invoca o método <init>, o método privado e o método da classe pai do construtor da instância.
  • invokevirtual: chame todos os métodos virtuais.
  • invokeinterface: chame o método da interface e determine um objeto que implementa essa interface no tempo de execução.
  • invokedynamic: primeiro analise dinamicamente o método referenciado pelo qualificador de ponto de chamada em tempo de execução e, em seguida, execute o método,

3.2 Despacho

As chamadas de expedição podem ser estáticas ou dinâmicas

  • Expedição estática
  • Envio dinâmico

De acordo com o número de base de distribuição, pode ser dividido em distribuição única e distribuição múltipla

  • Expedição única
  • Expedição múltipla

 

4. Mecanismo de execução de interpretação de bytecode baseado em pilha

4.1 O processo de compilação

 

 

Na linguagem Java, o compilador Javac conclui o processo de análise lexical e gramatical do código do programa para uma árvore de sintaxe abstrata e, em seguida, percorre a árvore de sintaxe para gerar um fluxo de instruções de bytecode linear.

4.2 Conjunto de instruções baseado em pilha e conjunto de instruções baseado em registro

  • Conjunto de instruções com base em pilha: a maioria das instruções no fluxo de instruções são de endereço zero e dependem da pilha de operandos para funcionar
  • Conjunto de instruções com base em registro: O mais típico é o conjunto de instruções com dois endereços x86, que é mais contundente, é a arquitetura do conjunto de instruções diretamente suportada pelos nossos PCs principais agora, essas instruções dependem de registros para funcionar.

 

4.3 Processo de execução do intérprete baseado em pilha

O processo geral de operação do conjunto de instruções da estrutura da pilha, as variáveis ​​intermediárias de todo o processo operacional são a troca e a inserção da pilha do operando como o caminho da troca de informações

 

ps: Esta seção é um pouco entediante, só entendo os conceitos gerais e continuarei a analisá-los mais tarde, quando tiver tempo. 

 

Isenção de responsabilidade: Este artigo é uma nota de estudo pessoal, o conteúdo é proveniente de "Conhecimento aprofundado da máquina virtual Java · Recursos avançados e práticas recomendadas da JVM" Zhou Zhiming e artigos de rede

Acho que você gosta

Origin www.cnblogs.com/xyzshm/p/12677450.html
Recomendado
Clasificación