changeset 48317:02f9be87cf5c

8179244: Assert failed in instanceMirrorKlass.inline.hpp Summary: Investigate the failure and upon observing that the assert is too strict, disable it and addd a comment. Reviewed-by: ehelin
author tschatzl
date Thu, 23 Nov 2017 15:51:06 +0100
parents ab188c22d4b6
children 08be4c1e540e
files src/hotspot/share/oops/instanceMirrorKlass.inline.hpp
diffstat 1 files changed, 9 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/hotspot/share/oops/instanceMirrorKlass.inline.hpp	Thu Nov 23 09:53:53 2017 +0100
+++ b/src/hotspot/share/oops/instanceMirrorKlass.inline.hpp	Thu Nov 23 15:51:06 2017 +0100
@@ -71,10 +71,15 @@
         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");
     }
   }