96 public: |
95 public: |
97 FieldPrinter(outputStream* st, oop obj = NULL) : _obj(obj), _st(st) {} |
96 FieldPrinter(outputStream* st, oop obj = NULL) : _obj(obj), _st(st) {} |
98 void do_field(fieldDescriptor* fd); |
97 void do_field(fieldDescriptor* fd); |
99 }; |
98 }; |
100 #endif // !PRODUCT |
99 #endif // !PRODUCT |
|
100 |
|
101 // ValueObjs embedded in klass. Describes where oops are located in instances of |
|
102 // this klass. |
|
103 class OopMapBlock VALUE_OBJ_CLASS_SPEC { |
|
104 public: |
|
105 // Byte offset of the first oop mapped by this block. |
|
106 int offset() const { return _offset; } |
|
107 void set_offset(int offset) { _offset = offset; } |
|
108 |
|
109 // Number of oops in this block. |
|
110 uint count() const { return _count; } |
|
111 void set_count(uint count) { _count = count; } |
|
112 |
|
113 // sizeof(OopMapBlock) in HeapWords. |
|
114 static const int size_in_words() { |
|
115 return align_size_up(int(sizeof(OopMapBlock)), HeapWordSize) >> |
|
116 LogHeapWordSize; |
|
117 } |
|
118 |
|
119 private: |
|
120 int _offset; |
|
121 uint _count; |
|
122 }; |
101 |
123 |
102 class instanceKlass: public Klass { |
124 class instanceKlass: public Klass { |
103 friend class VMStructs; |
125 friend class VMStructs; |
104 public: |
126 public: |
105 // See "The Java Virtual Machine Specification" section 2.16.2-5 for a detailed description |
127 // See "The Java Virtual Machine Specification" section 2.16.2-5 for a detailed description |
198 // Number of heapOopSize words used by non-static fields in this klass |
220 // Number of heapOopSize words used by non-static fields in this klass |
199 // (including inherited fields but after header_size()). |
221 // (including inherited fields but after header_size()). |
200 int _nonstatic_field_size; |
222 int _nonstatic_field_size; |
201 int _static_field_size; // number words used by static fields (oop and non-oop) in this klass |
223 int _static_field_size; // number words used by static fields (oop and non-oop) in this klass |
202 int _static_oop_field_size;// number of static oop fields in this klass |
224 int _static_oop_field_size;// number of static oop fields in this klass |
203 int _nonstatic_oop_map_size;// number of nonstatic oop-map blocks allocated at end of this klass |
225 int _nonstatic_oop_map_size;// size in words of nonstatic oop map blocks |
204 int _class_flags; // internal class state flags |
226 int _class_flags; // internal class state flags |
205 u2 _minor_version; // minor version number of class file |
227 u2 _minor_version; // minor version number of class file |
206 u2 _major_version; // major version number of class file |
228 u2 _major_version; // major version number of class file |
207 ClassState _init_state; // state of class |
229 ClassState _init_state; // state of class |
208 Thread* _init_thread; // Pointer to current thread doing initialization (to handle recusive initialization) |
230 Thread* _init_thread; // Pointer to current thread doing initialization (to handle recusive initialization) |
434 // source debug extension |
456 // source debug extension |
435 symbolOop source_debug_extension() const { return _source_debug_extension; } |
457 symbolOop source_debug_extension() const { return _source_debug_extension; } |
436 void set_source_debug_extension(symbolOop n){ oop_store_without_check((oop*) &_source_debug_extension, (oop) n); } |
458 void set_source_debug_extension(symbolOop n){ oop_store_without_check((oop*) &_source_debug_extension, (oop) n); } |
437 |
459 |
438 // nonstatic oop-map blocks |
460 // nonstatic oop-map blocks |
439 int nonstatic_oop_map_size() const { return _nonstatic_oop_map_size; } |
461 static int nonstatic_oop_map_size(unsigned int oop_map_count) { |
440 void set_nonstatic_oop_map_size(int size) { _nonstatic_oop_map_size = size; } |
462 return oop_map_count * OopMapBlock::size_in_words(); |
|
463 } |
|
464 unsigned int nonstatic_oop_map_count() const { |
|
465 return _nonstatic_oop_map_size / OopMapBlock::size_in_words(); |
|
466 } |
|
467 int nonstatic_oop_map_size() const { return _nonstatic_oop_map_size; } |
|
468 void set_nonstatic_oop_map_size(int words) { |
|
469 _nonstatic_oop_map_size = words; |
|
470 } |
441 |
471 |
442 // RedefineClasses() support for previous versions: |
472 // RedefineClasses() support for previous versions: |
443 void add_previous_version(instanceKlassHandle ikh, BitMap *emcp_methods, |
473 void add_previous_version(instanceKlassHandle ikh, BitMap *emcp_methods, |
444 int emcp_method_count); |
474 int emcp_method_count); |
445 bool has_previous_version() const; |
475 bool has_previous_version() const; |
850 return _idnum_allocated_count++; |
880 return _idnum_allocated_count++; |
851 } |
881 } |
852 } |
882 } |
853 |
883 |
854 |
884 |
855 // ValueObjs embedded in klass. Describes where oops are located in instances of this klass. |
|
856 |
|
857 class OopMapBlock VALUE_OBJ_CLASS_SPEC { |
|
858 private: |
|
859 jushort _offset; // Offset of first oop in oop-map block |
|
860 jushort _length; // Length of oop-map block |
|
861 public: |
|
862 // Accessors |
|
863 jushort offset() const { return _offset; } |
|
864 void set_offset(jushort offset) { _offset = offset; } |
|
865 |
|
866 jushort length() const { return _length; } |
|
867 void set_length(jushort length) { _length = length; } |
|
868 }; |
|
869 |
|
870 /* JNIid class for jfieldIDs only */ |
885 /* JNIid class for jfieldIDs only */ |
871 class JNIid: public CHeapObj { |
886 class JNIid: public CHeapObj { |
872 friend class VMStructs; |
887 friend class VMStructs; |
873 private: |
888 private: |
874 klassOop _holder; |
889 klassOop _holder; |