hotspot/src/share/vm/runtime/simpleThresholdPolicy.cpp
// Determine if we should do an OSR compilation of a given method.
CompLevel SimpleThresholdPolicy::loop_event(methodOop method, CompLevel cur_level) {
{- -------------------------------------------
(1) もし, 現在の JIT コンパイルレベルが CompLevel_none (= インタープリタ実行) なのに
対象のメソッドに OSR コードが存在すれば,
対象のメソッド用の OSR コードの中で, 最も高い JIT コンパイルレベルをリターンする.
(<= コメントによると, この場合は deopt でインタープリタ実行に落とされた可能性が高い??
このパスでは SimpleThresholdPolicy::common() を呼んでいないが,
他に OSR コードがあることから, 既に (実行回数などの) JIT コンパイルの条件は揃っているので
呼ぶ必要がないのだと思われる #TODo)
---------------------------------------- -}
if (cur_level == CompLevel_none) {
// If there is a live OSR method that means that we deopted to the interpreter
// for the transition.
CompLevel osr_level = (CompLevel)method->highest_osr_comp_level();
if (osr_level > CompLevel_none) {
return osr_level;
}
}
{- -------------------------------------------
(1) そうでなければ, SimpleThresholdPolicy::common() を呼び出し, その結果をリターンする.
(predicate には SimpleThresholdPolicy::loop_predicate() を使用)
---------------------------------------- -}
return common(&SimpleThresholdPolicy::loop_predicate, method, cur_level);
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.