Como a JVM decidiu compilar um método por JIT (categorizar um método como "quente")?
Eu já trabalhei com-XX:+PrintCompilation
, e conheço as técnicas básicas do compilador JIT e por que a compilação JIT é usada.
No entanto, ainda não descobri como a JVM decide compilar um método por JIT, ou seja, "quando chegar a hora certa de compilar um método por JIT".
Estou certo no pressuposto de que todo método começa a ser interpretado e, desde que não seja categorizado como "método quente", não será compilado? Tenho algo na cabeça que li que um método é considerado "quente" quando foi executado pelo menos 10.000 vezes (depois de interpretar o método 10.000 vezes, ele será compilado), mas devo admitir que sou não tenho certeza sobre isso ou onde eu li isso.
Então, para resumir minha pergunta:
1) Écada método interpretado, desde que não tenha sido categorizado como "quente" (e, portanto, foi compilado) ou há razões para os métodos serem compilados, mesmo que não sejam "quentes"?
(2) Como a JVM classifica os métodos em métodos "não quentes" e "quentes"? Número de execução? Algo mais?
(3) Se houver certos limites (como número de execuções) para métodos "quentes", existem sinalizadores Java (-XX:...
) para definir esses limites?