Top

HashTable クラス関連のクラス (BasicHashtableEntry, HashtableEntry, HashtableBucket, BasicHashtable, Hashtable, TwoOopHashtable)

これらは, 「ハッシュテーブル」として働くユーティリティ・クラス.

特に symbol table や string table としての使用を想定している, とのこと (See: SymbolTable, StringTable).

なお, 内部実装としては open hash で bucket 数は固定.

    ((cite: hotspot/src/share/vm/utilities/hashtable.hpp))
    // This is a generic hashtable, designed to be used for the symbol
    // and string tables.
    //
    // It is implemented as an open hash table with a fixed number of buckets.
    //
    // %note:
    //  - TableEntrys are allocated in blocks to reduce the space overhead.

概要(Summary)

このハッシュテーブルは, 内部的には以下の3つのクラスから構成されている.

より正確には, 以下のようなクラス階層を持つ.

クラス一覧(class list)


BasicHashtableEntry

概要(Summary)

HashTable 内の要素を表すクラスの基底クラス.

    ((cite: hotspot/src/share/vm/utilities/hashtable.hpp))
    class BasicHashtableEntry : public CHeapObj {

なお, このクラス自体は abstract class であり, 実際に使われるのはサブクラス.

内部構造(Internal structure)

内部には以下のフィールド(のみ)を含む.

    ((cite: hotspot/src/share/vm/utilities/hashtable.hpp))
      unsigned int         _hash;           // 32-bit hash for item

      // Link to next element in the linked list for this bucket.  EXCEPT
      // bit 0 set indicates that this entry is shared and must not be
      // unlinked from the table. Bit 0 is set during the dumping of the
      // archive. Since shared entries are immutable, _next fields in the
      // shared entries will not change.  New entries will always be
      // unshared and since pointers are align, bit 0 will always remain 0
      // with no extra effort.
      BasicHashtableEntry* _next;

詳細(Details)

See: here for details


HashtableEntry

概要(Summary)

BasicHashtableEntry クラスの具象サブクラスの1つ.

    ((cite: hotspot/src/share/vm/utilities/hashtable.hpp))
    template <class T> class HashtableEntry : public BasicHashtableEntry {

内部構造(Internal structure)

BasicHashtableEntry のフィールドに加えて, ハッシュ値の計算の基となった値自体を格納するための _literal フィールドが追加されている.

    ((cite: hotspot/src/share/vm/utilities/hashtable.hpp))
      T               _literal;          // ref to item in table.

詳細(Details)

See: here for details


HashtableBucket

概要(Summary)

HashTable クラス内で使用される補助クラス.

ハッシュテーブル内の bucket を表すクラス. 中身は BasicHashtableEntry オブジェクトを格納するための線形リストになっており, HashTable クラスはこのクラスを用いてハッシュテーブルを構築する.

    ((cite: hotspot/src/share/vm/utilities/hashtable.hpp))
    class HashtableBucket : public CHeapObj {

内部構造(Internal structure)

内部には以下のフィールド(のみ)を含む.

(BasicHashtableEntry は next フィールドを使って線形リストにできるので, 実際にはこのフィールドに BasicHashtableEntry のリストが格納されている. (See: BasicHashtable::addentry()))

    ((cite: hotspot/src/share/vm/utilities/hashtable.hpp))
      BasicHashtableEntry*       _entry;

詳細(Details)

See: here for details


BasicHashtable

概要(Summary)

ハッシュテーブルとして働くクラスの基底クラス.

(実質的には, Hashtable クラス用の補助クラスといった感じ)

    ((cite: hotspot/src/share/vm/utilities/hashtable.hpp))
    class BasicHashtable : public CHeapObj {

なお, このクラス自体は abstract class であり, 実際に使われるのはサブクラス.

内部構造(Internal structure)

内部には HashtableBucket オブジェクトの配列を保持している.

    ((cite: hotspot/src/share/vm/utilities/hashtable.hpp))
      HashtableBucket*  _buckets;

詳細(Details)

See: here for details


Hashtable

概要(Summary)

BasicHashtable クラスの具象サブクラスの1つ.

    ((cite: hotspot/src/share/vm/utilities/hashtable.hpp))
    template <class T> class Hashtable : public BasicHashtable {

詳細(Details)

See: here for details


TwoOopHashtable

概要(Summary)

特殊な HashTable クラス.

普通の HashTable クラスと異なり, ハッシュ値の計算に値を2個使用する (より具体的に言うと, compute_hash() メソッドが 1引数ではなく2引数になっている. これは, Symbol* 型の引数だけではなくクラスローダーを表す Handle 型の引数まで増えているため.)

    ((cite: hotspot/src/share/vm/utilities/hashtable.hpp))
    //  Verions of hashtable where two handles are used to compute the index.

    template <class T> class TwoOopHashtable : public Hashtable<T> {

詳細(Details)

See: here for details



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