ciInstanceKlass クラス用の補助クラス.
一度参照されたフィールド (の index 番号) と ciField オブジェクトの対応付けをメモイズしておき, 次回以降のフィールド参照処理を高速化するためのハッシュテーブル.
(なお, 名前が似ていて紛らわしいが constantPoolCacheOopDesc とは全く関係ない)
(なお, 現状では ciBytecodeStream クラスの処理からのみ利用されている模様)
((cite: hotspot/src/share/vm/ci/ciConstantPoolCache.hpp))
// ciConstantPoolCache
//
// The class caches indexed constant pool lookups.
//
// Usage note: this klass has nothing to do with constantPoolCacheOop.
class ciConstantPoolCache : public ResourceObj {
各 ciInstanceKlass オブジェクトの _field_cache フィールドに(のみ)格納されている.
(ただし, ciConstantPoolCache オブジェクトの生成自体は実際に必要になるまで遅延されている)
ciInstanceKlass::field_cache() 内で(のみ)生成されている (= 初めて使用される時まで生成が遅延されている).
ciInstanceKlass::field_cache() 内で(のみ)使用されている. そして, この関数は現在は以下のパスで(のみ)呼び出されている.
ciBytecodeStream::get_field() -> ciEnv::get_field_by_index() -> ciEnv::get_field_by_index_impl() -> ciInstanceKlass::field_cache()
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.