これらは, HotSpot のランタイムから Java のコードを呼び出すためのクラス (See: here for details).
HotSpot のランタイムから Java のコードを呼び出す処理 (= Java のメソッドの実行を開始する処理) を納めた名前空間(AllStatic クラス) (See: here for details).
Java のメソッドの開始する際には基本的にこのクラスが使用される. 以下は使用箇所の例.
((cite: hotspot/src/share/vm/runtime/javaCalls.hpp))
// All calls to Java have to go via JavaCalls. Sets up the stack frame
// and makes sure that the last_Java_frame pointers are chained correctly.
//
class JavaCalls: AllStatic {
HotSpot 内の様々な箇所で使用されている (#TODO).
See: here for details
JavaCalls クラス内で使用される補助クラス(StackObjクラス) (See: here for details).
JavaCalls による Java コード呼び出しの前準備と後始末を行う (呼び出しの直前に生成され, 呼び出しが終わった直後に破棄される). 具体的には以下のような処理を行う.
((cite: hotspot/src/share/vm/runtime/javaCalls.hpp))
// A JavaCallWrapper is constructed before each JavaCall and destructed after the call.
// Its purpose is to allocate/deallocate a new handle block and to save/restore the last
// Java fp/sp. A pointer to the JavaCallWrapper is stored on the stack.
class JavaCallWrapper: StackObj {
JavaCalls::call_helper() 内で(のみ)使用されている.
JavaCallWrapper が指しているポインタは GC で調査する必要がある.
このため GC 時には, スタックフレーム内に埋まっている JavaCallWrapper を見つけて JavaCallWrapper::oops_do() を実行する, という処理が行われる (See: frame::entry_frame_call_wrapper()).
See: here for details
JavaCalls クラス用の補助クラス(StackObjクラス) (See: here for details).
JavaCalls による Java コード呼び出し時に「引数」を格納しておくコンテナクラス.
(JavaCalls::call_helper() は引数として methodOop と JavaCallArguments を受けとる. コメントによると, var-args より速くて安全で便利, とのこと.)
((cite: hotspot/src/share/vm/runtime/javaCalls.hpp))
// Encapsulates arguments to a JavaCall (faster, safer, and more convenient than using var-args)
class JavaCallArguments : public StackObj {
HotSpot 内の様々な箇所で使用されている (#TODO).
(主に JavaCalls による呼び出し箇所)
(内部的に JavaCalls を使っている関係上, Exceptions クラス等でも JavaCallArguments は使用されている)
See: here for details
デバッグ用(開発時用)のクラス.
メソッドの型情報(methodOop の signature 情報)と実際の引数の型が合っているかどうかチェックする.
(ところでこのクラス名は typo?? #TODO)
((cite: hotspot/src/share/vm/runtime/javaCalls.cpp))
class SignatureChekker : public SignatureIterator {
JavaCallArguments::verify() 内で(のみ)使用されている
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.