Top

ciField クラス


ciField

概要(Summary)

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 {

使われ方(Usage)

インスタンスの格納場所(where its instances are stored)

以下の箇所に格納されている (#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()))

生成箇所(where its instances are created)

以下の箇所で(のみ)生成されている.

そして, この関数は現在は以下のパスで(のみ)呼び出されている.

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()

詳細(Details)

See: here for details



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