JIT コンパイル関係のデータ構造は HotSpot の起動時に初期化される. この初期化作業では以下のような処理が行われる.
CompilationPolicy オブジェクトには複数の種別が存在する.
生成する CompilationPolicy オブジェクトの種別は, コマンドラインオプションの -XX:CompilationPolicyChoice=<n>
で指定できる.
CompilerThread スレッドはそれぞれの JIT コンパイルレベル用(C1 用, C2 用) に複数個生成される. それぞれのレベル用に何個作るかは, コマンドラインオプションで指定できる. 数は CompilationPolicy::initialize() (を各サブクラスがオーバーライドしたもの) で算出されている. (See: CICompilerCount, CICompilerCountPerCPU)
(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)
(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() (を各サブクラスがオーバーライドしたもの)
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.