Top

oopDesc クラス


oopDesc

概要(Summary)

全ての oopDesc クラスの基底クラス.

なお, "oop" とは "ordinary object pointer" の略らしい. 「GC の対象になるヒープ中で管理されるオブジェクト (を指すポインタ)」 を表す.

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

    ((cite: hotspot/src/share/vm/oops/oop.hpp))
    // oopDesc is the top baseclass for objects classes.  The {name}Desc classes describe
    // the format of Java objects so the fields can be accessed from C++.
    // oopDesc is abstract.
    // (see oopHierarchy for complete oop class hierarchy)
    //
    // no virtual functions allowed
    ((cite: hotspot/src/share/vm/oops/oop.hpp))
    class oopDesc {

内部構造(Internal structure)

oopDesc は以下の様な構造をしている (サブクラスではさらにフィールドが追加されている).

    ((cite: hotspot/src/share/vm/oops/oop.hpp))
      volatile markOop  _mark;
      union _metadata {
        wideKlassOop    _klass;
        narrowOop       _compressed_klass;
      } _metadata;

備考(Notes)

なお, 実際の使用箇所では oop という別名(もしくはラッパークラス)で使われることが多い (See: oop).

備考(Notes)

このクラスのサブクラスは以下のような継承関係を持つ.

     oopDesc                    -- 全ての oopDesc の基底. abstract class
       instanceOopDesc          -- 「Java のインスタンスオブジェクト(及びクラスオブジェクト)」を表す oopDesc
       methodOopDesc            --     (Java の世界に直接は関係しない oopDesc. HotSpot の内部処理用)
       constMethodOopDesc       --     (Java の世界に直接は関係しない oopDesc. HotSpot の内部処理用)
       methodDataOopDesc        --     (Java の世界に直接は関係しない oopDesc. HotSpot の内部処理用)
       arrayOopDesc             -- 「Java の配列」を表す oopDesc の基底. abstract class
         objArrayOopDesc        -- 「Java のポインタ型の配列」を表す oopDesc. 
         typeArrayOopDesc       -- 「Java の primitive 型の配列」を表す oopDesc. 
       constantPoolOopDesc      --     (Java の世界に直接は関係しない oopDesc. HotSpot の内部処理用)
       constantPoolCacheOopDesc --     (Java の世界に直接は関係しない oopDesc. HotSpot の内部処理用)
       klassOopDesc             --     (Java の世界に直接は関係しない oopDesc. HotSpot の内部処理用)
       markOopDesc              --     (Java の世界に直接は関係しない oopDesc. HotSpot の内部処理用)
       compiledICHolderOopDesc  --     (Java の世界に直接は関係しない oopDesc. HotSpot の内部処理用)

詳細(Details)

See: here for details



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