8179244: Assert failed in instanceMirrorKlass.inline.hpp

Investigate the failure and upon observing that the assert is too strict, disable it and addd a comment.

Reviewed-by: ehelin
This commit is contained in:
Thomas Schatzl 2017-11-23 15:51:06 +01:00
parent d21c547b0e
commit 22d7ce52bb

View File

@ -71,10 +71,15 @@ void InstanceMirrorKlass::oop_oop_iterate(oop obj, OopClosureType* closure) {
Devirtualizer<nv>::do_klass(closure, klass);
}
} else {
// If klass is NULL then this a mirror for a primitive type.
// We don't have to follow them, since they are handled as strong
// roots in Universe::oops_do.
assert(java_lang_Class::is_primitive(obj), "Sanity check");
// We would like to assert here (as below) that if klass has been NULL, then
// this has been a mirror for a primitive type that we do not need to follow
// as they are always strong roots.
// However, we might get across a klass that just changed during CMS concurrent
// marking if allocation occurred in the old generation.
// This is benign here, as we keep alive all CLDs that were loaded during the
// CMS concurrent phase in the class loading, i.e. they will be iterated over
// and kept alive during remark.
// assert(java_lang_Class::is_primitive(obj), "Sanity check");
}
}