--- old/src/share/vm/oops/klass.hpp 2011-12-07 12:03:23.000000000 +0100 +++ new/src/share/vm/oops/klass.hpp 2011-12-07 12:03:23.000000000 +0100 @@ -313,7 +313,7 @@ // Can this klass be a primary super? False for interfaces and arrays of // interfaces. False also for arrays or classes with long super chains. bool can_be_primary_super() const { - const juint secondary_offset = secondary_super_cache_offset_in_bytes() + sizeof(oopDesc); + const juint secondary_offset = secondary_super_cache_offset_in_bytes(); return super_check_offset() != secondary_offset; } virtual bool can_be_primary_super_slow() const; @@ -323,7 +323,7 @@ if (!can_be_primary_super()) { return primary_super_limit(); } else { - juint d = (super_check_offset() - (primary_supers_offset_in_bytes() + sizeof(oopDesc))) / sizeof(klassOop); + juint d = (super_check_offset() - primary_supers_offset_in_bytes()) / sizeof(klassOop); assert(d < primary_super_limit(), "oob"); assert(_primary_supers[d] == as_klassOop(), "proper init"); return d; @@ -373,15 +373,15 @@ virtual void set_alloc_size(juint n) = 0; // Compiler support - static int super_offset_in_bytes() { return offset_of(Klass, _super); } - static int super_check_offset_offset_in_bytes() { return offset_of(Klass, _super_check_offset); } - static int primary_supers_offset_in_bytes(){ return offset_of(Klass, _primary_supers); } - static int secondary_super_cache_offset_in_bytes() { return offset_of(Klass, _secondary_super_cache); } - static int secondary_supers_offset_in_bytes() { return offset_of(Klass, _secondary_supers); } - static int java_mirror_offset_in_bytes() { return offset_of(Klass, _java_mirror); } - static int modifier_flags_offset_in_bytes(){ return offset_of(Klass, _modifier_flags); } - static int layout_helper_offset_in_bytes() { return offset_of(Klass, _layout_helper); } - static int access_flags_offset_in_bytes() { return offset_of(Klass, _access_flags); } + static int super_offset_in_bytes() { return sizeof(klassOopDesc) + offset_of(Klass, _super); } + static int super_check_offset_offset_in_bytes() { return sizeof(klassOopDesc) + offset_of(Klass, _super_check_offset); } + static int primary_supers_offset_in_bytes() { return sizeof(klassOopDesc) + offset_of(Klass, _primary_supers); } + static int secondary_super_cache_offset_in_bytes() { return sizeof(klassOopDesc) + offset_of(Klass, _secondary_super_cache); } + static int secondary_supers_offset_in_bytes() { return sizeof(klassOopDesc) + offset_of(Klass, _secondary_supers); } + static int java_mirror_offset_in_bytes() { return sizeof(klassOopDesc) + offset_of(Klass, _java_mirror); } + static int modifier_flags_offset_in_bytes() { return sizeof(klassOopDesc) + offset_of(Klass, _modifier_flags); } + static int layout_helper_offset_in_bytes() { return sizeof(klassOopDesc) + offset_of(Klass, _layout_helper); } + static int access_flags_offset_in_bytes() { return sizeof(klassOopDesc) + offset_of(Klass, _access_flags); } // Unpacking layout_helper: enum { @@ -478,7 +478,7 @@ bool is_subtype_of(klassOop k) const { juint off = k->klass_part()->super_check_offset(); klassOop sup = *(klassOop*)( (address)as_klassOop() + off ); - const juint secondary_offset = secondary_super_cache_offset_in_bytes() + sizeof(oopDesc); + const juint secondary_offset = secondary_super_cache_offset_in_bytes(); if (sup == k) { return true; } else if (off != secondary_offset) { @@ -674,7 +674,7 @@ // are potential problems in setting the bias pattern for // JVM-internal oops. inline void set_prototype_header(markOop header); - static int prototype_header_offset_in_bytes() { return offset_of(Klass, _prototype_header); } + static int prototype_header_offset_in_bytes() { return sizeof(klassOopDesc) + offset_of(Klass, _prototype_header); } int biased_lock_revocation_count() const { return (int) _biased_lock_revocation_count; } // Atomically increments biased_lock_revocation_count and returns updated value