Я уже работал с -XX:+PrintCompilation
, и я знаю основные приемы JIT-компилятора и почему используется JIT-компиляция.
Тем не менее, я до сих пор не выяснил, как JVM решает JIT-компиляцию метода, т.е. «когда настало подходящее время для JIT-компиляции метода».
Прав ли я в предположении, что каждый метод начинает интерпретироваться, и пока он не классифицируется как «горячий метод», он не будет компилироваться? У меня есть что-то в голове, что я прочитал, что метод считается "горячим", когда он был выполнен не менее 10.000 раз (после интерпретации метода 10.000 раз он будет скомпилирован), но я должен признать, что я не уверен в этом или где я это читал.
Итак, чтобы резюмировать мой вопрос:
(1) Интерпретируется ли каждый метод, если он не был отнесен к категории "горячих" (и, следовательно, был скомпилирован), или существуют ли причины для компиляции методов, даже если они не являются "горячими"? "?
(2) Как JVM разделяет методы на «горячие» и «горячие»? Количество казней? Что-нибудь еще?
(3) Если существуют определенные пороговые значения (например, количество выполнений) для «горячих» методов, существуют ли флаги Java (-XX:...
) для установки этих пороговых значений?
-XX:+PrintFlagsFinal
, там много флагов, относящихся к JIT-компиляторам и их уровням, встраиванию, размерам методов, потокам компилятора и т. Д. - person the8472   schedule 24.02.2016