Sistemas de Tempo de Execução e Máquinas Virtuais
Sistemas de tempo de execução e máquinas virtuais fornecem o ambiente de execução para programas, interpretando ou compilando código intermediário e gerenciando os serviços que um programa em execução necessita.
Definition
Um sistema de tempo de execução é o ambiente de software que suporta a execução de um programa além de seu próprio código, e uma máquina virtual é um motor de execução abstrato que interpreta ou compila um conjunto de instruções portátil, proporcionando portabilidade e serviços de tempo de execução.
Scope
Este tópico abrange a camada entre o código compilado e o hardware: interpretadores de bytecode e máquinas abstratas, compilação just-in-time (JIT), despacho dinâmico e pesquisa de método, convenções de chamada e gerenciamento de pilha, e serviços de tempo de execução como tratamento de exceções e reflexão. Ele aborda o design de máquinas virtuais portáteis e as técnicas que tornam as linguagens gerenciadas eficientes.
Core questions
- Como as máquinas virtuais proporcionam portabilidade entre hardwares?
- Como a compilação just-in-time combina interpretação e código nativo?
- Como o despacho dinâmico e a pesquisa de método são tornados eficientes?
- Quais serviços de tempo de execução devem suportar uma linguagem gerenciada?
Key theories
- Arquitetura de máquina virtual portátil
- A especificação da Java Virtual Machine define um bytecode e um modelo de execução portáteis e verificáveis, demonstrando como uma máquina virtual desvincula uma linguagem de um hardware específico.
- Compilação just-in-time
- Aycock examina as técnicas pelas quais os tempos de execução compilam código para a forma nativa durante a execução, equilibrando a inicialização da interpretação com a produtividade do código compilado usando informações de tempo de execução.
- Cache em linha para despacho dinâmico
- A implementação do Smalltalk por Deutsch e Schiffman introduziu o cache em linha e a tradução dinâmica, técnicas chave para tornar a pesquisa de método em linguagens de despacho dinâmico rápida.
Clinical relevance
Máquinas virtuais e tempos de execução gerenciados impulsionam plataformas amplamente utilizadas para Java, .NET, JavaScript e Python, proporcionando portabilidade, segurança e otimização adaptativa. A compilação JIT e o cache em linha são as razões pelas quais linguagens de alto nível e dinâmicas podem alcançar desempenho competitivo.
History
Máquinas abstratas datam dos primeiros sistemas portáteis e do Smalltalk, cuja implementação de 1984 foi pioneira na tradução dinâmica e nos caches em linha. A Java Virtual Machine popularizou o bytecode portátil em meados da década de 1990, e compiladores JIT adaptativos como HotSpot e, posteriormente, os motores JavaScript trouxeram otimização agressiva em tempo de execução para as linguagens gerenciadas convencionais.
Debates
- Interpretação versus compilação just-in-time
- Os projetistas de tempo de execução ponderam entre interpretadores simples com inicialização rápida e baixo uso de memória e compiladores JIT que alcançam maior desempenho de pico ao custo de tempo de aquecimento e complexidade de implementação, frequentemente combinando os dois em sistemas em camadas.
Key figures
- Peter Deutsch
- John Aycock
- James Gosling
- Gilad Bracha
Related topics
Seminal works
- lindholm2014
- aycock2003
- deutsch1984
Frequently asked questions
- O que é uma máquina virtual neste contexto?
- Aqui, uma máquina virtual é um motor de execução de software que executa um conjunto de instruções portátil (como bytecode), abstraindo o hardware subjacente e fornecendo serviços de tempo de execução em vez de emular um computador inteiro.
- Como a compilação just-in-time ajuda no desempenho?
- Um compilador JIT traduz partes frequentemente executadas de um programa para código nativo em tempo de execução, usando informações de perfil que um compilador ahead-of-time não possui, de modo que o código "quente" é executado em velocidade próxima à nativa.