Java · Avançado · Português · Técnico
desotimização
Processo em que a JVM descarta o código compilado de um método e volta ao interpretador quando uma suposição otimista do JIT deixa de valer.
Onde usar
Aparece em logs do PrintCompilation como 'made not entrant' e em quedas de desempenho depois de uma chamada que quebrou a especulação, como um tipo novo num ponto monomórfico.
Em código
// o JIT assume que l é sempre ArrayList
void usar(List<String> l) { l.size(); }
usar(new ArrayList<>()); // otimiza
usar(new LinkedList<>()); // pode desotimizar
// veja: -XX:+PrintCompilationExemplos
O método foi desotimizado quando apareceu um novo tipo.
Vi 'made not entrant' no log, é uma desotimização.
Cuidado
É normal e seguro, não indica bug. Muitas desotimizações em sequência indicam código instável, e aí vale investigar.
Sinônimos
deoptimization