Up Top

Method に関する処理 : Java のコードによるメソッド呼び出し処理 (3) : 呼び出し先(callee 側)での method entry 処理 : Template Interpreter の場合 : 概要


概要(Summary)

メソッドのエントリ処理は, メソッドの種類に応じて複数用意されている. これによってエントリ処理を最適化している (たとえば, 単なるアクセサメソッドであれば複雑なエントリ処理は省略してすぐにフィールドの値をリターンしてしまえばよい. また, 算術関数用のメソッドの場合もエントリ処理は省略してすぐに算術関数を計算し結果をリターンしてしまえばよい, 等).

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)

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

エントリ処理コードの生成処理

(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()

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

AbstractInterpreterGenerator::generate_method_entry() (sparc の場合)

See: here for details

AbstractInterpreterGenerator::generate_method_entry() (x86_64 の場合)

See: here for details


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