< prev index next >

src/share/vm/ci/ciInstanceKlass.hpp

Print this page
rev 12906 : [mq]: gc_interface


  27 
  28 #include "ci/ciConstantPoolCache.hpp"
  29 #include "ci/ciFlags.hpp"
  30 #include "ci/ciKlass.hpp"
  31 #include "ci/ciSymbol.hpp"
  32 
  33 // ciInstanceKlass
  34 //
  35 // This class represents a Klass* in the HotSpot virtual machine
  36 // whose Klass part is an InstanceKlass.  It may or may not
  37 // be loaded.
  38 class ciInstanceKlass : public ciKlass {
  39   CI_PACKAGE_ACCESS
  40   friend class ciBytecodeStream;
  41   friend class ciEnv;
  42   friend class ciExceptionHandler;
  43   friend class ciMethod;
  44   friend class ciField;
  45 
  46 private:

  47   jobject                _loader;
  48   jobject                _protection_domain;
  49 
  50   InstanceKlass::ClassState _init_state;           // state of class
  51   bool                   _is_shared;
  52   bool                   _has_finalizer;
  53   bool                   _has_subklass;
  54   bool                   _has_nonstatic_fields;
  55   bool                   _has_nonstatic_concrete_methods;
  56   bool                   _is_anonymous;
  57 
  58   ciFlags                _flags;
  59   jint                   _nonstatic_field_size;
  60   jint                   _nonstatic_oop_map_size;
  61 
  62   // Lazy fields get filled in only upon request.
  63   ciInstanceKlass*       _super;
  64   ciInstance*            _java_mirror;
  65 
  66   ciConstantPoolCache*   _field_cache;  // cached map index->field
  67   GrowableArray<ciField*>* _nonstatic_fields;
  68   int                    _has_injected_fields; // any non static injected fields? lazily initialized.
  69 
  70   // The possible values of the _implementor fall into following three cases:
  71   //   NULL: no implementor.
  72   //   A ciInstanceKlass that's not itself: one implementor.
  73   //   Itsef: more than one implementors.
  74   ciInstanceKlass*       _implementor;
  75 
  76   void compute_injected_fields();
  77   bool compute_injected_fields_helper();
  78 
  79 protected:
  80   ciInstanceKlass(Klass* k);
  81   ciInstanceKlass(ciSymbol* name, jobject loader, jobject protection_domain);
  82 
  83   InstanceKlass* get_instanceKlass() const {
  84     return InstanceKlass::cast(get_Klass());
  85   }






  86 
  87   oop loader();
  88   jobject loader_handle();
  89 
  90   oop protection_domain();
  91   jobject protection_domain_handle();
  92 
  93   const char* type_string() { return "ciInstanceKlass"; }
  94 
  95   bool is_in_package_impl(const char* packagename, int len);
  96 
  97   void print_impl(outputStream* st);
  98 
  99   ciConstantPoolCache* field_cache();
 100 
 101   bool is_shared() { return _is_shared; }
 102 
 103   void compute_shared_init_state();
 104   bool compute_shared_has_subklass();
 105   int  compute_nonstatic_fields();




  27 
  28 #include "ci/ciConstantPoolCache.hpp"
  29 #include "ci/ciFlags.hpp"
  30 #include "ci/ciKlass.hpp"
  31 #include "ci/ciSymbol.hpp"
  32 
  33 // ciInstanceKlass
  34 //
  35 // This class represents a Klass* in the HotSpot virtual machine
  36 // whose Klass part is an InstanceKlass.  It may or may not
  37 // be loaded.
  38 class ciInstanceKlass : public ciKlass {
  39   CI_PACKAGE_ACCESS
  40   friend class ciBytecodeStream;
  41   friend class ciEnv;
  42   friend class ciExceptionHandler;
  43   friend class ciMethod;
  44   friend class ciField;
  45 
  46 private:
  47   jobject                _holder;
  48   jobject                _loader;
  49   jobject                _protection_domain;
  50 
  51   InstanceKlass::ClassState _init_state;           // state of class
  52   bool                   _is_shared;
  53   bool                   _has_finalizer;
  54   bool                   _has_subklass;
  55   bool                   _has_nonstatic_fields;
  56   bool                   _has_nonstatic_concrete_methods;
  57   bool                   _is_anonymous;
  58 
  59   ciFlags                _flags;
  60   jint                   _nonstatic_field_size;
  61   jint                   _nonstatic_oop_map_size;
  62 
  63   // Lazy fields get filled in only upon request.
  64   ciInstanceKlass*       _super;
  65   ciInstance*            _java_mirror;
  66 
  67   ciConstantPoolCache*   _field_cache;  // cached map index->field
  68   GrowableArray<ciField*>* _nonstatic_fields;
  69   int                    _has_injected_fields; // any non static injected fields? lazily initialized.
  70 
  71   // The possible values of the _implementor fall into following three cases:
  72   //   NULL: no implementor.
  73   //   A ciInstanceKlass that's not itself: one implementor.
  74   //   Itsef: more than one implementors.
  75   ciInstanceKlass*       _implementor;
  76 
  77   void compute_injected_fields();
  78   bool compute_injected_fields_helper();
  79 
  80 protected:
  81   ciInstanceKlass(Klass* k);
  82   ciInstanceKlass(ciSymbol* name, jobject holder, jobject loader, jobject protection_domain);
  83 
  84   InstanceKlass* get_instanceKlass() const {
  85     return InstanceKlass::cast(get_Klass());
  86   }
  87 
  88   // Hold metadata from unloading by keeping its holder alive.
  89   // Though ciInstanceKlass records class loader oop, it's not enough to keep
  90   // VM anonymous classes alive (loader == NULL). Klass holder should be used instead.
  91   oop holder();
  92   jobject holder_handle();
  93 
  94   oop loader();
  95   jobject loader_handle();
  96 
  97   oop protection_domain();
  98   jobject protection_domain_handle();
  99 
 100   const char* type_string() { return "ciInstanceKlass"; }
 101 
 102   bool is_in_package_impl(const char* packagename, int len);
 103 
 104   void print_impl(outputStream* st);
 105 
 106   ciConstantPoolCache* field_cache();
 107 
 108   bool is_shared() { return _is_shared; }
 109 
 110   void compute_shared_init_state();
 111   bool compute_shared_has_subklass();
 112   int  compute_nonstatic_fields();


< prev index next >