これらは, JIT Compiler 内で JVM の「型」を扱うためのユーティリティ・クラス.
JIT Compiler 内で JVM の「型」を扱うためのユーティリティ・クラス. 1つの ciType オブジェクトが 1つの型に対応する.
(一応 ciObject クラスの具象サブクラスの1つだが, 対応する oop を持つわけではないので ciObject という感じがあんまりしないが... #TODO)
((cite: hotspot/src/share/vm/ci/ciType.hpp))
// ciType
//
// This class represents either a class (T_OBJECT), array (T_ARRAY),
// or one of the primitive types such as T_INT.
class ciType : public ciObject {
ciType クラスの _basic_types フィールド (static フィールド) に(のみ)格納されている.
(正確には, このフィールドは ciType の配列を格納するフィールド. この中に, 全ての ciType オブジェクトが格納されている)
ciType クラスの _basic_types フィールドは, ポインタ型ではなく実体なので, 配列用のメモリ領域は初期段階で自動的に生成される.
そのメモリ領域中に個別の ciType オブジェクトを書き込む作業は ciObjectFactory::init_shared_objects() 内で(のみ)行われている.
スーパークラスである ciObject クラスのフィールドに加えて, 以下のフィールドを持つ.
(その ciType オブジェクトが表している型を示す)
((cite: hotspot/src/share/vm/ci/ciType.hpp))
BasicType _basic_type;
See: here for details
ciType クラスのサブクラスの1つ. JIT Compiler 内で returnAddress 型の値を扱うためのユーティリティ・クラス (なお, ここでの returnAddress 型とは jsr バイトコード/ret バイトコードが使用する returnAddress 型のこと).
(一応 ciObject クラスの具象サブクラスの1つだが, 対応する oop を持つわけではないので ciObject という感じがあんまりしないが... #TODO)
なお, 一度生成された ciReturnAddress オブジェクトはメモイズされており, bci が同じものに対しては同一の ciReturnAddress オブジェクトが返されるようになっている.
((cite: hotspot/src/share/vm/ci/ciType.hpp))
// ciReturnAddress
//
// This class represents the type of a specific return address in the
// bytecodes.
class ciReturnAddress : public ciType {
各 ciObjectFactory オブジェクトの _return_addresses フィールドに(のみ)格納されている.
(正確には, このフィールドは ciReturnAddress の GrowableArray を格納するフィールド. この中に, その ciObjectFactory の ciObjectFactory::get_return_address() で生成された全ての ciReturnAddress オブジェクトが格納されている)
(ただし, ciReturnAddress オブジェクトの生成自体は実際に必要になるまで遅延されている)
GrowableArray 用のメモリ領域は ciObjectFactory::ciObjectFactory() 内で(のみ)確保されている.
ciReturnAddress オブジェクト自体は ciObjectFactory::get_return_address() 内で(のみ)生成されている (= 初めて使用される時まで生成が遅延されている).
スーパークラスである ciType クラスのフィールドに加えて, 以下のフィールドを持つ.
(リターン先のバイトコードを示す (= 要するに対応する jsr バイトコードの次のバイトコード))
((cite: hotspot/src/share/vm/ci/ciType.hpp))
// The bci of this return address.
int _bci;
なお ciType としての型は T_ADDRESS.
((cite: hotspot/src/share/vm/ci/ciType.cpp))
ciReturnAddress::ciReturnAddress(int bci) : ciType(T_ADDRESS) {
assert(0 <= bci, "bci cannot be negative");
_bci = bci;
}
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.