メソッドのエントリ処理は, メソッドの種類に応じて複数用意されている. これによってエントリ処理を最適化している (たとえば, 単なるアクセサメソッドであれば複雑なエントリ処理は省略してすぐにフィールドの値をリターンしてしまえばよい. また, 算術関数用のメソッドの場合もエントリ処理は省略してすぐに算術関数を計算し結果をリターンしてしまえばよい, 等).
Template Interpreter の場合, 以下の関数が生成するコードによってメソッドのエントリ処理が行われる. これらの関数群によるコード生成は, インタープリタの初期化時に行われる.
これらの関数は, それぞれ以下のように使い分けられている.
Function | Description | Related Link |
---|---|---|
InterpreterGenerator::generate_normal_entry() | (下記以外の) 一般的なメソッドの場合. | (See: here for details) |
InterpreterGenerator::generate_abstract_entry() | abstract メソッド (= 実装されていないメソッド) の場合. | (See: here for details) |
InterpreterGenerator::generate_accessor_entry() | アクセサメソッド (= フィールドの値を取得してリターンするだけのメソッド) の場合. | (See: here for details) |
InterpreterGenerator::generate_empty_entry() | 中身が空のメソッド (= 何もしないメソッド) の場合. | (See: here for details) |
InterpreterGenerator::generate_math_entry() | 特定の数学関数用メソッド(Interpreter::java_lang_math_sin 等)の場合. | (See: here for details) |
InterpreterGenerator::generate_method_handle_entry() | java.lang.invoke.MethodHandles::invoke() の場合. | (See: here for details) |
InterpreterGenerator::generate_Reference_get_entry() | java.lang.ref.Reference.get() の場合. | (See: here for details) |
InterpreterGenerator::generate_native_entry() | ネイティブメソッドの場合. | (See: here for details) |
(See: here for details) -> AbstractInterpreterGenerator::generate_method_entry() -> InterpreterGenerator::generate_normal_entry() -> InterpreterGenerator::generate_abstract_entry() -> InterpreterGenerator::generate_accessor_entry() -> InterpreterGenerator::generate_empty_entry() -> InterpreterGenerator::generate_math_entry() -> InterpreterGenerator::generate_method_handle_entry() -> InterpreterGenerator::generate_Reference_get_entry() -> InterpreterGenerator::generate_native_entry()
See: here for details
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.