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

  1. Interpretação: Começa interpretando o bytecode (lento, mas start rápido).
  2. Profiling: A VM conta quantas vezes cada função é chamada (“quente”).
  3. Compilação JIT (C1): Se a função ficar “morna”, o compilador C1 gera código nativo rápido (poucas otimizações).
  4. 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.
Back to top