hotspot/src/share/vm/interpreter/templateInterpreter.cpp
void TemplateInterpreter::initialize() {
{- -------------------------------------------
(1) 既に初期化が終わっていれば, することはないので, ここでリターン
(_code は TemplateInterpreter::initialize() でしか設定しないように見えるが,
TemplateInterpreter::initialize() が複数回呼ばれることがある?? #TODO)
---------------------------------------- -}
if (_code != NULL) return;
{- -------------------------------------------
(1) (assert)
---------------------------------------- -}
// assertions
assert((int)Bytecodes::number_of_codes <= (int)DispatchTable::length,
"dispatch table too small");
{- -------------------------------------------
(1) AbstractInterpreter::initialize() を呼び出して, InvocationCounter 等の初期化を行う.
---------------------------------------- -}
AbstractInterpreter::initialize();
{- -------------------------------------------
(1) TemplateTable::initialize() を呼び出して, 各バイトコードに対応する Template オブジェクトを生成.
(なお, ここでは Template オブジェクトを作るだけ.
これらの Template オブジェクトによって実際にコードが生成されるのはもう少し先)
---------------------------------------- -}
TemplateTable::initialize();
{- -------------------------------------------
(1) (以下のブロック内で Template Interpreter を構築する.
実際の構築処理は InterpreterGenerator のコンストラクタ内で行われる.)
---------------------------------------- -}
// generate interpreter
{ ResourceMark rm;
{- -------------------------------------------
(1.1) (トレース出力)
---------------------------------------- -}
TraceTime timer("Interpreter generation", TraceStartupTime);
{- -------------------------------------------
(1.1) (変数宣言など)
---------------------------------------- -}
int code_size = InterpreterCodeSize;
NOT_PRODUCT(code_size *= 4;) // debug uses extra interpreter code space
{- -------------------------------------------
(1.1) これから作成する Template コードを入れるための StubQueue を生成.
(See: StubQueue)
---------------------------------------- -}
_code = new StubQueue(new InterpreterCodeletInterface, code_size, NULL,
"Interpreter");
{- -------------------------------------------
(1.1) InterpreterGenerator のコンストラクタを呼び出して, Template Interpreter を構築する.
---------------------------------------- -}
InterpreterGenerator g(_code);
{- -------------------------------------------
(1.1) (トレース出力)
---------------------------------------- -}
if (PrintInterpreter) print();
}
{- -------------------------------------------
(1) (ここまでが Template Interpreter の構築処理)
---------------------------------------- -}
{- -------------------------------------------
(1) 生成したテーブル(_normal_table) を dispatch table にセットする.
---------------------------------------- -}
// initialize dispatch table
_active_table = _normal_table;
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.