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