Ho già lavorato con -XX:+PrintCompilation
e conosco le tecniche di base del compilatore JIT e perché viene utilizzata la compilazione JIT.In che modo JVM ha deciso di compilare JIT un metodo (categorizzare un metodo come "caldo")?
Eppure non ho ancora scoperto come JVM decida di JIT-compilare un metodo, ad esempio "quando è giunto il momento giusto per compilare un metodo JIT".
Ho ragione nell'assumere che ogni metodo inizi a essere interpretato e finché non viene classificato come "metodo caldo" non verrà compilato? Ho qualcosa nella parte posteriore della mia testa che leggo che un metodo è considerato "caldo" quando è stato eseguito almeno 10.000 volte (dopo aver interpretato il metodo 10.000 volte, sarà compilato), ma devo ammettere che sono non sono sicuro di questo o dove ho letto questo.
Quindi, per riassumere la mia domanda:
(1) è ogni metodo interpretato come fino a quando non è stato classificato come metodo di "caldo" (e quindi è stato compilato) oppure ci sono ragioni per i metodi per essere compilato anche se non sono "caldi"?
(2) In che modo la JVM classifica i metodi in metodi "non caldi" e "caldi"? Numero di esecuzione? Qualunque altra cosa?
(3) Se ci sono alcune soglie (come il numero di esecuzioni) per i metodi "hot", ci sono flag Java (-XX:...
) per impostare queste soglie?
Date un'occhiata all'uscita del '-XX: + PrintFlagsFinal', ci sono un sacco di bandiere relativi ai compilatori JIT e le loro livelli, inline, metodi dimensioni, le discussioni del compilatore ecc – the8472