< prev index next >

src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeSet.cpp

Print this page
rev 58565 : 8238358: Implementation of JEP 371: Hidden Classes
Reviewed-by: duke
Contributed-by: mandy.chung@oracle.com, lois.foltan@oracle.com, david.holmes@oracle.com, harold.seigel@oracle.com, serguei.spitsyn@oracle.com, alex.buckley@oracle.com, jamsheed.c.m@oracle.com

@@ -135,11 +135,10 @@
   return METHOD_ID(klass, method);
 }
 
 static traceid cld_id(CldPtr cld, bool leakp) {
   assert(cld != NULL, "invariant");
-  assert(!cld->is_unsafe_anonymous(), "invariant");
   if (leakp) {
     SET_LEAKP(cld);
   } else {
     SET_TRANSIENT(cld);
   }

@@ -161,10 +160,11 @@
 static ClassLoaderData* get_cld(const Klass* klass) {
   assert(klass != NULL, "invariant");
   if (klass->is_objArray_klass()) {
     klass = ObjArrayKlass::cast(klass)->bottom_klass();
   }
+  if (klass->is_hidden_weak()) return NULL;
   return is_unsafe_anonymous(klass) ?
     InstanceKlass::cast(klass)->unsafe_anonymous_host()->class_loader_data() : klass->class_loader_data();
 }
 
 template <typename T>

@@ -186,14 +186,16 @@
 static int write_klass(JfrCheckpointWriter* writer, KlassPtr klass, bool leakp) {
   assert(writer != NULL, "invariant");
   assert(_artifacts != NULL, "invariant");
   assert(klass != NULL, "invariant");
   writer->write(artifact_id(klass));
-  writer->write(cld_id(get_cld(klass), leakp));
+  ClassLoaderData* cld = get_cld(klass);
+  writer->write(cld != NULL ? cld_id(cld, leakp) : 0);
   writer->write(mark_symbol(klass, leakp));
   writer->write(package_id(klass, leakp));
   writer->write(get_flags(klass));
+  writer->write<bool>(klass->is_hidden());
   return 1;
 }
 
 int write__klass(JfrCheckpointWriter* writer, const void* k) {
   assert(k != NULL, "invariant");

@@ -544,11 +546,10 @@
   do_modules();
 }
 
 static int write_classloader(JfrCheckpointWriter* writer, CldPtr cld, bool leakp) {
   assert(cld != NULL, "invariant");
-  assert(!cld->is_unsafe_anonymous(), "invariant");
   // class loader type
   const Klass* class_loader_klass = cld->class_loader_klass();
   if (class_loader_klass == NULL) {
     // (primordial) boot class loader
     writer->write(artifact_id(cld)); // class loader instance id

@@ -602,11 +603,11 @@
 class CLDCallback : public CLDClosure {
  public:
   CLDCallback() {}
   void do_cld(ClassLoaderData* cld) {
     assert(cld != NULL, "invariant");
-    if (cld->is_unsafe_anonymous()) {
+    if (cld->has_class_mirror_holder()) {
       return;
     }
     do_class_loader_data(cld);
   }
 };
< prev index next >