Up Top

JIT Compiler の処理 (1) : JIT コンパイルを開始する処理 : 実行回数が閾値を超えたことによる開始処理 : (2) CompilationPolicy の処理 : StackWalkCompPolicy の場合


概要(Summary)

StackWalkCompPolicy クラスの CompilationPolicy オブジェクトの場合, CompilationPolicy::event() が呼ばれると NonTieredCompPolicy::event() が実行される.

JIT コンパイルを行うかどうかの判断は, 上記の関数から呼び出される StackWalkCompPolicy::method_invocation_event() または StackWalkCompPolicy::method_back_branch_event() で行われる.

なおメソッドの JIT コンパイル時には, スタックを遡って処理対象のメソッドの呼び出し元まで調査し, インライン展開する範囲を決めている. この処理は StackWalkCompPolicy::findTopInlinableFrame() で行われる.

備考(Notes)

ループのコンパイル(OSR)時にはスタックを遡っての調査は行われない (この場合の処理は SimpleCompPolicy とほぼ同じ).

処理の流れ (概要)(Execution Flows : Summary)

StackWalkCompPolicy::event() (= NonTieredCompPolicy::event())
-> * メソッドのコンパイルの場合:
     -> StackWalkCompPolicy::method_invocation_event()
        -> StackWalkCompPolicy::findTopInlinableFrame()
           -> StackWalkCompPolicy::senderOf()
              -> RFrame::caller()
                 -> RFrame::new_RFrame()
        -> CompileBroker::compile_method()
           -> (See: here for details)
   * ループのコンパイルの場合:
     -> StackWalkCompPolicy::method_back_branch_event()
        -> CompileBroker::compile_method()
           -> (See: here for details)

処理の流れ (詳細)(Execution Flows : Details)

NonTieredCompPolicy::event()

See: here for details

StackWalkCompPolicy::method_invocation_event()

See: here for details

StackWalkCompPolicy::method_back_branch_event()

See: here for details

StackWalkCompPolicy::findTopInlinableFrame()

See: here for details

StackWalkCompPolicy::senderOf()

(#Under Construction) See: here for details

RFrame::caller()

See: here for details

frame::is_first_java_frame()

See: here for details

RFrame::new_RFrame()

See: here for details

CompilationPolicy::can_be_compiled()

See: here for details

methodOopDesc::is_not_compilable()

See: here for details

methodOopDesc::is_not_c1_compilable()

See: here for details

methodOopDesc::is_not_c2_compilable()

See: here for details

methodOopDesc::is_not_osr_compilable()

See: here for details

StackWalkCompPolicy::shouldInline()

See: here for details

StackWalkCompPolicy::shouldNotInline()

See: here for details


This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.