「あるメソッドの呼び出された回数が閾値を越えた」場合, あるいは「あるループの実行された回数が閾値を越えた」場合は, その閾値を超えたコードに対して JIT コンパイルが開始される.
処理の流れは以下のようになる.
なお, InvocationCounter オブジェクトは methodOopDesc 及び methodDataOopDesc 内に格納されている. (See: here for details)
なお, 実際には CompilationPolicy オブジェクトには4つのクラスが存在し, 対応するサブクラスがオーバーライドした関数で判断が行われる. (See: here, here, here and here for details)
以上の処理で CompilationPolicy オブジェクトが JIT コンパイルを行うべきと判断すれば, CompileBroker::compile_method() が呼び出されて JIT コンパイルが開始される. (See: here for details)
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.