JIT, bytecode e por que “compilado × interpretado” é simplificação
Objetivo
Reconhecer bytecode, JIT e AOT e compreender que estratégias de execução podem ser combinadas.
Conceitos essenciais
Bytecode
Representação intermediária destinada a uma VM/runtime; não é necessariamente código nativo da CPU.
JIT
Just-In-Time compilation transforma código durante a execução, frequentemente usando informações observadas sobre trechos utilizados.
AOT
Ahead-Of-Time compila antes da execução principal.
Estratégias híbridas
JavaScript moderno, Java, .NET e outros ambientes podem combinar parsing, IR, interpretação, JIT ou AOT. A melhor pergunta é “como esta implementação executa este programa?”.
Custos
JIT pode melhorar trechos quentes, mas tem custo de compilação, memória e warm-up.
Modelo mental
SOURCE → PARSE → IR/BYTECODE? → INTERPRETAÇÃO/JIT/AOT? → CÓDIGO NATIVO → CPUExemplo e demonstração
Uma engine JavaScript pode iniciar rapidamente com uma representação interna e otimizar funções frequentemente executadas; detalhes variam entre engines.
Experimento / prática
- Classifique bytecode como fonte, intermediário ou nativo.
- Explique JIT em uma frase e AOT em outra.
Erros comuns
- Linguagem é intrinsecamente e exclusivamente compilada ou interpretada.
- JIT não possui custos.
Resumo
Ao concluir esta aula, revise o modelo mental e tente explicá-lo com suas próprias palavras antes de avançar.