src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeSet.cpp
changeset 51444 3e5d28e6de32
parent 50634 c349d409262a
child 51959 db0c3952de52
equal deleted inserted replaced
51443:cdffba164671 51444:3e5d28e6de32
    75   return pkg_entry == NULL ? 0 : TRACE_ID(pkg_entry);
    75   return pkg_entry == NULL ? 0 : TRACE_ID(pkg_entry);
    76 }
    76 }
    77 
    77 
    78 static traceid cld_id(CldPtr cld) {
    78 static traceid cld_id(CldPtr cld) {
    79   assert(cld != NULL, "invariant");
    79   assert(cld != NULL, "invariant");
    80   return cld->is_anonymous() ? 0 : TRACE_ID(cld);
    80   return cld->is_unsafe_anonymous() ? 0 : TRACE_ID(cld);
    81 }
    81 }
    82 
    82 
    83 static void tag_leakp_klass_artifacts(KlassPtr k, bool class_unload) {
    83 static void tag_leakp_klass_artifacts(KlassPtr k, bool class_unload) {
    84   assert(k != NULL, "invariant");
    84   assert(k != NULL, "invariant");
    85   PkgPtr pkg = k->package();
    85   PkgPtr pkg = k->package();
    90       tag_leakp_artifact(module, class_unload);
    90       tag_leakp_artifact(module, class_unload);
    91     }
    91     }
    92   }
    92   }
    93   CldPtr cld = k->class_loader_data();
    93   CldPtr cld = k->class_loader_data();
    94   assert(cld != NULL, "invariant");
    94   assert(cld != NULL, "invariant");
    95   if (!cld->is_anonymous()) {
    95   if (!cld->is_unsafe_anonymous()) {
    96     tag_leakp_artifact(cld, class_unload);
    96     tag_leakp_artifact(cld, class_unload);
    97   }
    97   }
    98 }
    98 }
    99 
    99 
   100 class TagLeakpKlassArtifact {
   100 class TagLeakpKlassArtifact {
   228 typedef JfrArtifactWriterHost<ModuleWriterImpl, TYPE_MODULE> ModuleWriter;
   228 typedef JfrArtifactWriterHost<ModuleWriterImpl, TYPE_MODULE> ModuleWriter;
   229 
   229 
   230 int write__artifact__classloader(JfrCheckpointWriter* writer, JfrArtifactSet* artifacts, const void* c) {
   230 int write__artifact__classloader(JfrCheckpointWriter* writer, JfrArtifactSet* artifacts, const void* c) {
   231   assert(c != NULL, "invariant");
   231   assert(c != NULL, "invariant");
   232   CldPtr cld = (CldPtr)c;
   232   CldPtr cld = (CldPtr)c;
   233   assert(!cld->is_anonymous(), "invariant");
   233   assert(!cld->is_unsafe_anonymous(), "invariant");
   234   const traceid cld_id = TRACE_ID(cld);
   234   const traceid cld_id = TRACE_ID(cld);
   235   // class loader type
   235   // class loader type
   236   const Klass* class_loader_klass = cld->class_loader_klass();
   236   const Klass* class_loader_klass = cld->class_loader_klass();
   237   if (class_loader_klass == NULL) {
   237   if (class_loader_klass == NULL) {
   238     // (primordial) boot class loader
   238     // (primordial) boot class loader
   299 int write__artifact__klass__symbol(JfrCheckpointWriter* writer, JfrArtifactSet* artifacts, const void* k) {
   299 int write__artifact__klass__symbol(JfrCheckpointWriter* writer, JfrArtifactSet* artifacts, const void* k) {
   300   assert(writer != NULL, "invariant");
   300   assert(writer != NULL, "invariant");
   301   assert(artifacts != NULL, "invaiant");
   301   assert(artifacts != NULL, "invaiant");
   302   assert(k != NULL, "invariant");
   302   assert(k != NULL, "invariant");
   303   const InstanceKlass* const ik = (const InstanceKlass*)k;
   303   const InstanceKlass* const ik = (const InstanceKlass*)k;
   304   if (ik->is_anonymous()) {
   304   if (ik->is_unsafe_anonymous()) {
   305     CStringEntryPtr entry =
   305     CStringEntryPtr entry =
   306       artifacts->map_cstring(JfrSymbolId::anonymous_klass_name_hash_code(ik));
   306       artifacts->map_cstring(JfrSymbolId::unsafe_anonymous_klass_name_hash_code(ik));
   307     assert(entry != NULL, "invariant");
   307     assert(entry != NULL, "invariant");
   308     return write__artifact__cstring__entry__(writer, entry);
   308     return write__artifact__cstring__entry__(writer, entry);
   309   }
   309   }
   310 
   310 
   311   SymbolEntryPtr entry = artifacts->map_symbol(JfrSymbolId::regular_klass_name_hash_code(ik));
   311   SymbolEntryPtr entry = artifacts->map_symbol(JfrSymbolId::regular_klass_name_hash_code(ik));
   356           count += module_symbols(module);
   356           count += module_symbols(module);
   357         }
   357         }
   358       }
   358       }
   359       CldPtr cld = klass->class_loader_data();
   359       CldPtr cld = klass->class_loader_data();
   360       assert(cld != NULL, "invariant");
   360       assert(cld != NULL, "invariant");
   361       if (!cld->is_anonymous()) {
   361       if (!cld->is_unsafe_anonymous()) {
   362         count += class_loader_symbols(cld);
   362         count += class_loader_symbols(cld);
   363       }
   363       }
   364       if (_method_used_predicate(klass)) {
   364       if (_method_used_predicate(klass)) {
   365         count += method_symbols(klass);
   365         count += method_symbols(klass);
   366       }
   366       }
   372 template <template <typename> class Predicate>
   372 template <template <typename> class Predicate>
   373 int KlassSymbolWriterImpl<Predicate>::klass_symbols(KlassPtr klass) {
   373 int KlassSymbolWriterImpl<Predicate>::klass_symbols(KlassPtr klass) {
   374   assert(klass != NULL, "invariant");
   374   assert(klass != NULL, "invariant");
   375   assert(_predicate(klass), "invariant");
   375   assert(_predicate(klass), "invariant");
   376   const InstanceKlass* const ik = (const InstanceKlass*)klass;
   376   const InstanceKlass* const ik = (const InstanceKlass*)klass;
   377   if (ik->is_anonymous()) {
   377   if (ik->is_unsafe_anonymous()) {
   378     CStringEntryPtr entry =
   378     CStringEntryPtr entry =
   379       this->_artifacts->map_cstring(JfrSymbolId::anonymous_klass_name_hash_code(ik));
   379       this->_artifacts->map_cstring(JfrSymbolId::unsafe_anonymous_klass_name_hash_code(ik));
   380     assert(entry != NULL, "invariant");
   380     assert(entry != NULL, "invariant");
   381     return _unique_predicate(entry->id()) ? write__artifact__cstring__entry__(this->_writer, entry) : 0;
   381     return _unique_predicate(entry->id()) ? write__artifact__cstring__entry__(this->_writer, entry) : 0;
   382   }
   382   }
   383   SymbolEntryPtr entry = this->_artifacts->map_symbol(ik->name());
   383   SymbolEntryPtr entry = this->_artifacts->map_symbol(ik->name());
   384   assert(entry != NULL, "invariant");
   384   assert(entry != NULL, "invariant");
   430 }
   430 }
   431 
   431 
   432 template <template <typename> class Predicate>
   432 template <template <typename> class Predicate>
   433 int KlassSymbolWriterImpl<Predicate>::class_loader_symbols(CldPtr cld) {
   433 int KlassSymbolWriterImpl<Predicate>::class_loader_symbols(CldPtr cld) {
   434   assert(cld != NULL, "invariant");
   434   assert(cld != NULL, "invariant");
   435   assert(!cld->is_anonymous(), "invariant");
   435   assert(!cld->is_unsafe_anonymous(), "invariant");
   436   int count = 0;
   436   int count = 0;
   437   // class loader type
   437   // class loader type
   438   const Klass* class_loader_klass = cld->class_loader_klass();
   438   const Klass* class_loader_klass = cld->class_loader_klass();
   439   if (class_loader_klass == NULL) {
   439   if (class_loader_klass == NULL) {
   440     // (primordial) boot class loader
   440     // (primordial) boot class loader
   694  public:
   694  public:
   695   typedef CldPtr TypePtr;
   695   typedef CldPtr TypePtr;
   696   static TypePtr select(KlassPtr klass) {
   696   static TypePtr select(KlassPtr klass) {
   697     assert(klass != NULL, "invariant");
   697     assert(klass != NULL, "invariant");
   698     CldPtr cld = klass->class_loader_data();
   698     CldPtr cld = klass->class_loader_data();
   699     return cld->is_anonymous() ? NULL : cld;
   699     return cld->is_unsafe_anonymous() ? NULL : cld;
   700   }
   700   }
   701 };
   701 };
   702 
   702 
   703 typedef KlassToFieldEnvelope<CldFieldSelector, CldWriterWithClear> KlassCldWriterWithClear;
   703 typedef KlassToFieldEnvelope<CldFieldSelector, CldWriterWithClear> KlassCldWriterWithClear;
   704 typedef KlassToFieldEnvelope<CldFieldSelector, CompositeCldWriterWithClear> KlassCompositeCldWriterWithClear;
   704 typedef KlassToFieldEnvelope<CldFieldSelector, CompositeCldWriterWithClear> KlassCompositeCldWriterWithClear;
   920   bool _class_unload;
   920   bool _class_unload;
   921  public:
   921  public:
   922   CLDCallback(bool class_unload) : _class_unload(class_unload) {}
   922   CLDCallback(bool class_unload) : _class_unload(class_unload) {}
   923   void do_cld(ClassLoaderData* cld) {
   923   void do_cld(ClassLoaderData* cld) {
   924      assert(cld != NULL, "invariant");
   924      assert(cld != NULL, "invariant");
   925     if (cld->is_anonymous()) {
   925     if (cld->is_unsafe_anonymous()) {
   926       return;
   926       return;
   927     }
   927     }
   928     if (_class_unload) {
   928     if (_class_unload) {
   929       JfrTypeSet::do_unloaded_class_loader_data(cld);
   929       JfrTypeSet::do_unloaded_class_loader_data(cld);
   930       return;
   930       return;