Mercurial > hg > truffle
diff src/share/vm/oops/instanceKlass.hpp @ 938:b37c246bf7ce
6861660: OopMapBlock count/size confusion
Reviewed-by: tonyp, iveresov
author | jcoomes |
---|---|
date | Tue, 11 Aug 2009 15:37:23 -0700 |
parents | be93aad57795 |
children | 9eebd3ac74cf |
line wrap: on
line diff
--- a/src/share/vm/oops/instanceKlass.hpp Mon Aug 24 13:52:42 2009 -0700 +++ b/src/share/vm/oops/instanceKlass.hpp Tue Aug 11 15:37:23 2009 -0700 @@ -71,7 +71,6 @@ // forward declaration for class -- see below for definition class SuperTypeClosure; -class OopMapBlock; class JNIid; class jniIdMapBase; class BreakpointInfo; @@ -99,6 +98,29 @@ }; #endif // !PRODUCT +// ValueObjs embedded in klass. Describes where oops are located in instances of +// this klass. +class OopMapBlock VALUE_OBJ_CLASS_SPEC { + public: + // Byte offset of the first oop mapped by this block. + jushort offset() const { return _offset; } + void set_offset(jushort offset) { _offset = offset; } + + // Number of oops in this block. + jushort count() const { return _count; } + void set_count(jushort count) { _count = count; } + + // sizeof(OopMapBlock) in HeapWords. + static const int size_in_words() { + return align_size_up(int(sizeof(OopMapBlock)), HeapWordSize) >> + LogHeapWordSize; + } + + private: + jushort _offset; + jushort _count; +}; + class instanceKlass: public Klass { friend class VMStructs; public: @@ -191,7 +213,7 @@ int _nonstatic_field_size; int _static_field_size; // number words used by static fields (oop and non-oop) in this klass int _static_oop_field_size;// number of static oop fields in this klass - int _nonstatic_oop_map_size;// number of nonstatic oop-map blocks allocated at end of this klass + int _nonstatic_oop_map_size;// size in words of nonstatic oop map blocks bool _is_marked_dependent; // used for marking during flushing and deoptimization bool _rewritten; // methods rewritten. bool _has_nonstatic_fields; // for sizing with UseCompressedOops @@ -424,8 +446,16 @@ void set_source_debug_extension(symbolOop n){ oop_store_without_check((oop*) &_source_debug_extension, (oop) n); } // nonstatic oop-map blocks - int nonstatic_oop_map_size() const { return _nonstatic_oop_map_size; } - void set_nonstatic_oop_map_size(int size) { _nonstatic_oop_map_size = size; } + static int nonstatic_oop_map_size(int oop_map_count) { + return oop_map_count * OopMapBlock::size_in_words(); + } + int nonstatic_oop_map_count() const { + return _nonstatic_oop_map_size / OopMapBlock::size_in_words(); + } + int nonstatic_oop_map_size() const { return _nonstatic_oop_map_size; } + void set_nonstatic_oop_map_size(int words) { + _nonstatic_oop_map_size = words; + } // RedefineClasses() support for previous versions: void add_previous_version(instanceKlassHandle ikh, BitMap *emcp_methods, @@ -839,21 +869,6 @@ } -// ValueObjs embedded in klass. Describes where oops are located in instances of this klass. - -class OopMapBlock VALUE_OBJ_CLASS_SPEC { - private: - jushort _offset; // Offset of first oop in oop-map block - jushort _length; // Length of oop-map block - public: - // Accessors - jushort offset() const { return _offset; } - void set_offset(jushort offset) { _offset = offset; } - - jushort length() const { return _length; } - void set_length(jushort length) { _length = length; } -}; - /* JNIid class for jfieldIDs only */ class JNIid: public CHeapObj { friend class VMStructs;