# HG changeset patch # User drwhite # Date 1466460727 14400 # Mon Jun 20 18:12:07 2016 -0400 # Node ID d2b21bd3dae01a5eb9b49161c8e6c817ac99f263 # Parent 7862a718ec47bf061efeb6b0ed801fc848a3ab0d [mq]: webrev.01 diff --git a/src/share/vm/classfile/javaClasses.cpp b/src/share/vm/classfile/javaClasses.cpp --- a/src/share/vm/classfile/javaClasses.cpp +++ b/src/share/vm/classfile/javaClasses.cpp @@ -871,12 +871,16 @@ int java_lang_Class::oop_size(oop java_class) { assert(_oop_size_offset != 0, "must be set"); - return java_class->int_field(_oop_size_offset); + int size = java_class->int_field(_oop_size_offset); + assert(size > 0, "size not set or stomped on: %d", size); + return size; } void java_lang_Class::set_oop_size(oop java_class, int size) { assert(_oop_size_offset != 0, "must be set"); + assert(size > 0, "total object size must be positive: %d", size); java_class->int_field_put(_oop_size_offset, size); } + int java_lang_Class::static_oop_field_count(oop java_class) { assert(_static_oop_field_count_offset != 0, "must be set"); return java_class->int_field(_static_oop_field_count_offset); diff --git a/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp b/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp --- a/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp +++ b/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp @@ -7365,9 +7365,16 @@ if (oop(addr)->klass_or_null() != NULL) { // Ignore mark word because we are running concurrent with mutators assert(oop(addr)->is_oop(true), "live block should be an oop"); - assert(size == + Klass* k = oop(addr)->klass(); + + // It's not always safe to ask for the size of a j.l.Class object, + // if the Class's oop_size hasn't been set yet. + if (!k->is_instance_klass() || + !InstanceKlass::cast(k)->is_mirror_instance_klass()) { + assert(size == CompactibleFreeListSpace::adjustObjectSize(oop(addr)->size()), "P-mark and computed size do not agree"); + } } #endif diff --git a/src/share/vm/oops/oop.inline.hpp b/src/share/vm/oops/oop.inline.hpp --- a/src/share/vm/oops/oop.inline.hpp +++ b/src/share/vm/oops/oop.inline.hpp @@ -258,8 +258,8 @@ } } - assert(s % MinObjAlignment == 0, "alignment check"); - assert(s > 0, "Bad size calculated"); + assert(s % MinObjAlignment == 0, "alignment check of %d", s); + assert(s > 0, "Bad size calculated: %d", s); return s; }