ホットスポットの呼び出し

 

 

出典:/src/share/vm/runtime/stubRoutines.hpp

静的CallStubのcall_stub(){ 
    CAST_TO_FN_PTR(CallStub、_call_stub_entry)を返します。
}

ここで、以下のように定義された/src/share/vm/runtime/utilities/globalDefinitions.hppファイルで定義されたCAST_TO_FN_PTRマクロ:

#define CAST_TO_FN_PTR(func_type、値)((func_type)(castable_address(値)))  

 call_stub機能マクロ置換し、展開した後、次の形式になります:

静的CallStubのcall_stub(){ 
    リターン(CallStub)(castable_address(_call_stub_entry))。
}

 /src/share/vm/runtime/stubRoutines.hppファイルで定義されてCallStub、次のように具体的に定義され:

//は、Javaへのコール
のtypedef無効(* CallStub)(
    アドレスリンクを、
    intptr_t *結果、
    BasicTypeののresult_type、
    方法*方法、
    アドレスentry_point、
    intptr_t *パラメータは、
    size_of_parameters、int型
    トラップ
)。 

タイプ、関数ポインタ上で定義されている、関数が宣言された8つの仮パラメータを指摘しました。 

次のようにcall_stubで呼び出さcastable_address()関数()関数は、globalDefinitions.hppファイルに実装されています。

インラインaddress_wordのcastable_address(アドレスX){ 
    戻りaddress_word(X)。
}

次のようにaddress_word特定のカスタム型は、特定のglobalDefinitions.hppファイルで定義されています。

ポインタを保持する//符号なし整数
C ++のいくつかの実装を除い// 
関数//リンクポインタ。
//はとにかく、このタイプに配置するこれらのいずれかが必要ありません。
uintptr_tをaddress_wordのtypedef。
                                   

  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

おすすめ

転載: www.cnblogs.com/mazhimazhi/p/11109736.html