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