JIT Compiler からクラスのフィールド情報にアクセスするための一時オブジェクト(ResourceObjクラス). 1つの ciField オブジェクトが 1つのフィールドに対応する.
((cite: hotspot/src/share/vm/ci/ciField.hpp))
// ciField
//
// This class represents the result of a field lookup in the VM.
// The lookup may not succeed, in which case the information in
// the ciField will be incomplete.
class ciField : public ResourceObj {
以下の箇所に格納されている (#TODO 他の箇所).
ciInstanceKlass::get_field_by_offset() 用のフィールド.
(正確には, このフィールドは ciField の GrowableArray を格納するフィールド. この中に, そのクラスの static ではないフィールドに対応する全ての ciField オブジェクトが格納されている)
(ただし, この GrowableArray の生成や初期化自体は実際に必要になるまで遅延されている. (See: ciInstanceKlass::compute_nonstatic_fields()))
?? (このフィールドは使用箇所が見当たらないような...)
ciInstanceKlass::non_static_fields() 用のフィールド (ただし, 肝心の ciInstanceKlass::non_static_fields() 自体が使われていないような... #TODO)
(正確には, このフィールドは ciField の GrowableArray を格納するフィールド. この中に, そのクラスの static ではないフィールドに対応する全ての ciField オブジェクトが格納されている)
(ただし, この GrowableArray の生成や初期化自体は実際に必要になるまで遅延されている. (See: ciInstanceKlass::non_static_fields()))
以下の箇所で(のみ)生成されている.
そして, この関数は現在は以下のパスで(のみ)呼び出されている.
ciBytecodeStream::get_field() -> ciEnv::get_field_by_index() -> ciEnv::get_field_by_index_impl() ciInstanceKlass::nof_nonstatic_fields() -> ciInstanceKlass::compute_nonstatic_fields() -> ciInstanceKlass::compute_nonstatic_fields_impl() ciObjectFactory::init_shared_objects() -> ciInstanceKlass::compute_nonstatic_fields() -> (同上) ciInstanceKlass::get_canonical_holder() -> ciInstanceKlass::nof_nonstatic_fields() -> (同上) ciInstanceKlass::get_field_by_offset() -> ciInstanceKlass::nof_nonstatic_fields() -> (同上) ciInstanceKlass::get_field_by_name() ciInstanceKlass::non_static_fields() -> instanceKlass::do_nonstatic_fields() -> NonStaticFieldFiller::do_field()
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.