これらは, クラスローディング処理用のクラス. より具体的に言うと, 現在ロード中のクラスを一時的に覚えておくためのクラス (ClassCircularityError の検査等に使用される) (See: here and here for details).
なお, これらは SystemDictionary クラス内で(のみ)使用される補助クラス.
これらのオブジェクトは, ロードの開始時に作られ, ロードが完了すると破棄される (詳細は SystemDictionary クラスの説明を参照).
現在進行中のロード作業1つ1つは (class_name, loader) というタプルで表現される. これらのクラスは以下の様に対応する.
PlaceholderEntry は, このタプルを表現するクラス.
PlaceholderTable は, PlaceholderEntry を入れておくハッシュテーブル (現在進行中のロード作業全体を示す). class_name と loader をキーとして, 対応する PlaceholderEntry があるかどうかを返す.
SeenThread は, ある特定のクラスに対して, 現在ロードを行っているスレッド全員を表現するクラス. ClassCircularityError の検査等に使われる (例えば, superclass のロード前にこれに登録しておくことで, circularity なのか他のスレッドがロード作業中なのかが区別できる).
((cite: hotspot/src/share/vm/classfile/placeholders.hpp))
// Placeholder objects. These represent classes currently
// being loaded, as well as arrays of primitives.
//
SystemDictionary クラス内で使用される補助クラス (See: SystemDictionary).
SystemDictionary が現在ロード中のクラス情報を入れておくハッシュテーブル.
((cite: hotspot/src/share/vm/classfile/placeholders.hpp))
class PlaceholderTable : public TwoOopHashtable<Symbol*> {
SystemDictionary クラスの _placeholders フィールド (static フィールド) に(のみ)格納されている.
((cite: hotspot/src/share/vm/classfile/systemDictionary.hpp))
// Hashtable holding placeholders for classes being loaded.
static PlaceholderTable* _placeholders;
See: here for details
PlaceholderTable クラス内で使用される補助クラス.
PlaceholderTable オブジェクト内に格納されるハッシュテーブル・エントリ.
((cite: hotspot/src/share/vm/classfile/placeholders.hpp))
// Placeholder objects represent classes currently being loaded.
// All threads examining the placeholder table must hold the
// SystemDictionary_lock, so we don't need special precautions
// on store ordering here.
// The system dictionary is the only user of this class.
class PlaceholderEntry : public HashtableEntry<Symbol*> {
See: here for details
PlaceholderEntry クラス用の補助クラス.
ある特定のクラスに対して, 現在ロードを行っているスレッド全員を表す.
((cite: hotspot/src/share/vm/classfile/placeholders.hpp))
// SeenThread objects represent list of threads that are
// currently performing a load action on a class.
// For class circularity, set before loading a superclass.
// For bootclasssearchpath, set before calling load_instance_class.
// Defining must be single threaded on a class/classloader basis
// For DEFINE_CLASS, the head of the queue owns the
// define token and the rest of the threads wait to return the
// result the first thread gets.
class SeenThread: public CHeapObj {
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.