Aula 05: Expressões Regulares e Scanners
Objetivos
- Compreender a compilação dinâmica (JIT).
- Otimização guiada por perfil (PGO).
Conteúdo
Linguagens como Java, JS e C# usam JIT para combinar portabilidade (Bytecode) com performance (Nativo).
Como funciona uma JVM HotSpot
- Interpretação: Começa interpretando o bytecode (lento, mas start rápido).
- Profiling: A VM conta quantas vezes cada função é chamada (“quente”).
- Compilação JIT (C1): Se a função ficar “morna”, o compilador C1 gera código nativo rápido (poucas otimizações).
- Compilação Otimizada (C2): Se ficar “muito quente”, o compilador C2 (lento, poderoso) gera código nativo pesadamente otimizado.
Especulação e Deotimização
O JIT faz apostas perigosas. Ex: “Este ‘if’ nunca foi tomado nas últimas 10 mil vezes, vou assumir que nunca será e remover o código”. Se a aposta falhar (o ‘if’ for tomado), o JIT faz Deoptimization: Joga fora o código nativo e volta para o intérprete no meio da execução.
Referências
- Aho, A. V., Lam, M. S., Sethi, R., & Ullman, J. D. (2006). Compilers: Principles, Techniques, and Tools.
- Cooper, K., & Torczon, L. (2011). Engineering a Compiler.