Up Top

JIT Compiler の処理 (0) : JIT 関係の初期化処理


概要(Summary)

JIT コンパイル関係のデータ構造は HotSpot の起動時に初期化される. この初期化作業では以下のような処理が行われる.

備考(Notes)

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

CompilerThread の初期化処理

(HotSpot の起動時処理) (See: here for details)
-> Threads::create_vm()
   -> CompileBroker::compilation_init()
      -> (1) コンパイラオブジェクト (AbstractCompilerのサブクラスのインスタンス) を生成する
             生成するコンパイラオブジェクトのクラスは HotSpot のビルド時のマクロ定義によって決まる
             * (#ifndef SHARK かつ) #ifdef COMPILER1 の場合:
               -> Compiler::Compiler()
             * (#ifndef SHARK かつ) #ifdef COMPILER1 の場合:
               -> C2Compiler::C2Compiler()
             * #ifdef SHARK の場合:
               -> SharkCompiler::SharkCompiler()

         (1) CompilerThread を生成し, 実行を開始させる
             -> CompileBroker::init_compiler_threads()
                -> CompileBroker::make_compiler_thread()
                   -> CompilerThread::CompilerThread()
                     -> JavaThread::JavaThread() (← なお, エントリポイントとしては compiler_thread_entry() 関数が指定されている)
                        -> (See: here for details)
                   -> Thread::start()
                      -> (See: here for details)
compiler_thread_entry()
-> CompileBroker::compiler_thread_loop()
   -> (See: here for details)

CompilationPolicy オブジェクトの初期化処理

(HotSpot の起動時処理) (See: here for details)
-> Threads::create_vm()
   -> init_globals()
      -> compilationPolicy_init()
         -> (1) CompilationPolicyChoice の値に応じた CompilationPolicy オブジェクトを生成する
                * 0 の場合:
                  -> SimpleCompPolicy::SimpleCompPolicy()
                * 1 の場合: (#ifdef COMPILER2 でないとエラー)
                  -> StackWalkCompPolicy::StackWalkCompPolicy()
                * 2 の場合: (#ifdef TIERED でないとエラー)
                  -> SimpleThresholdPolicy::SimpleThresholdPolicy()   
                * 3 の場合: (#ifdef TIERED でないとエラー)
                  -> AdvancedThresholdPolicy::AdvancedThresholdPolicy()

            (1) 生成した CompilationPolicy オブジェクトを初期化する
                -> CompilationPolicy::initialize() (を各サブクラスがオーバーライドしたもの)

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

CompileBroker::compilation_init()

See: here for details

CompileBroker::init_compiler_threads()

See: here for details

CompileBroker::make_compiler_thread()

See: here for details

CompilerThread::CompilerThread()

See: here for details

compiler_thread_entry()

See: here for details

compilationPolicy_init()

See: here for details

NonTieredCompPolicy::initialize()

See: here for details

AdvancedThresholdPolicy::initialize()

See: here for details

SimpleThresholdPolicy::initialize()

See: here for details


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