Up Top

JNI の処理 : JNI Functions の処理 : JNI によるメソッド呼び出し(Calling Instance Methods, Calling Static Methods)


該当する JNI 関数

概要(Summary)

JNI では 型やstaticか否かでメソッド呼び出し用の関数が複数種類用意されている. ただし, どの場合も最終的には JavaCalls::call() に行き着く模様.

備考(Notes)

処理用の関数のうち返値が void でないものについては, 以下のマクロを用いて定義されている. (返値が void のものについてだけは, マクロを使わずに単体で定義されている)

Function Macro
dynamic dispatch を伴うインスタンスメソッド呼び出し DEFINE_CALLMETHOD() マクロ
dynamic dispatch を伴わないインスタンスメソッド呼び出し DEFINE_CALLNONVIRTUALMETHOD() マクロ
staic メソッド呼び出し DEFINE_CALLSTATICMETHOD() マクロ

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

インスタンスメソッド用の jmethodID 取得処理の場合

jni_GetMethodID()
-> get_method_id()
   -> instanceKlass::get_jmethod_id()

static メソッド用の jmethodID 取得処理の場合

jni_GetStaticMethodID()
-> get_method_id()
   -> (同上)

dynamic dispatch を伴うインスタンスメソッド呼び出し処理 (CallMethod(), CallMethodA(), CallMethodV())

DEFINE_CALLMETHOD() マクロ  or  jni_CallVoidMethod{,A,V}()
-> jni_invoke_nonstatic()
   -> JavaCalls::call()
      -> (See: here for details)

dynamic dispatch を伴わないインスタンスメソッド呼び出し処理 (CallNonvirtualMethod(), CallNonvirtualMethodA(), CallNonvirtualMethodV())

DEFINE_CALLNONVIRTUALMETHOD() マクロ  or  jni_CallNonvirtualVoidMethod{,A,V}()
-> jni_invoke_nonstatic()
   -> (同上)

staic メソッド呼び出し処理 (CallStaticMethod(), CallStaticMethodA(), CallStaticMethodV())

DEFINE_CALLSTATICMETHOD() マクロ  or  jni_CallStaticVoidMethod{,A,V}()
-> jni_invoke_static()
   -> JavaCalls::call()
      -> (See: here for details)

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

jni_GetMethodID()

See: here for details

get_method_id()

See: here for details

instanceKlass::get_jmethod_id()

(#Under Construction)

jni_GetStaticMethodID()

See: here for details

DEFINE_CALLMETHOD() マクロ

(#Under Construction) See: here for details

jni_CallVoidMethod()

See: here for details

jni_CallVoidMethodV()

See: here for details

jni_CallVoidMethodA()

See: here for details

jni_invoke_nonstatic()

See: here for details

JNI_ArgumentPusher::iterate()

(#Under Construction)

JNI_ArgumentPusherVaArg::get_int()

(#Under Construction)

JNI_ArgumentPusherArray::get_int()

(#Under Construction)

JavaValue::set_type()

See: here for details

DEFINE_CALLNONVIRTUALMETHOD() マクロ

(#Under Construction) See: here for details

jni_CallVoidMethod()

See: here for details

jni_CallVoidMethodV()

See: here for details

jni_CallVoidMethodA()

See: here for details

DEFINE_CALLSTATICMETHOD() マクロ

(#Under Construction) See: here for details

jni_CallStaticVoidMethod()

See: here for details

jni_CallStaticVoidMethodV()

See: here for details

jni_CallStaticVoidMethodA()

See: here for details

jni_invoke_static()

See: here for details


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