src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeSet.cpp
branchJEP-349-branch
changeset 58251 c4067538a0f2
parent 58206 87436c6f681f
child 58259 b6efcf2217f1
equal deleted inserted replaced
58250:5851f445c684 58251:c4067538a0f2
   822   _artifacts->iterate_cstrings(csw);
   822   _artifacts->iterate_cstrings(csw);
   823   sw.add(csw.count());
   823   sw.add(csw.count());
   824   _artifacts->tally(sw);
   824   _artifacts->tally(sw);
   825 }
   825 }
   826 
   826 
       
   827 static bool clear_artifacts = false;
       
   828 
       
   829 void JfrTypeSet::clear() {
       
   830   clear_artifacts = true;
       
   831 }
       
   832 
   827 typedef Wrapper<KlassPtr, ClearArtifact> ClearKlassBits;
   833 typedef Wrapper<KlassPtr, ClearArtifact> ClearKlassBits;
   828 typedef Wrapper<MethodPtr, ClearArtifact> ClearMethodFlag;
   834 typedef Wrapper<MethodPtr, ClearArtifact> ClearMethodFlag;
   829 typedef MethodIteratorHost<ClearMethodFlag, ClearKlassBits, false> ClearKlassAndMethods;
   835 typedef MethodIteratorHost<ClearMethodFlag, ClearKlassBits, false> ClearKlassAndMethods;
   830 
   836 
   831 static size_t teardown() {
   837 static size_t teardown() {
   833   const size_t total_count = _artifacts->total_count();
   839   const size_t total_count = _artifacts->total_count();
   834   if (previous_epoch()) {
   840   if (previous_epoch()) {
   835     assert(_writer != NULL, "invariant");
   841     assert(_writer != NULL, "invariant");
   836     ClearKlassAndMethods clear(_writer);
   842     ClearKlassAndMethods clear(_writer);
   837     _artifacts->iterate_klasses(clear);
   843     _artifacts->iterate_klasses(clear);
   838     _artifacts->clear();
   844     JfrTypeSet::clear();
   839     ++checkpoint_id;
   845     ++checkpoint_id;
   840   }
   846   }
   841   return total_count;
   847   return total_count;
   842 }
   848 }
   843 
   849 
   847   _class_unload = class_unload;
   853   _class_unload = class_unload;
   848   _flushpoint = flushpoint;
   854   _flushpoint = flushpoint;
   849   if (_artifacts == NULL) {
   855   if (_artifacts == NULL) {
   850     _artifacts = new JfrArtifactSet(class_unload);
   856     _artifacts = new JfrArtifactSet(class_unload);
   851   } else {
   857   } else {
   852     _artifacts->initialize(class_unload);
   858     _artifacts->initialize(class_unload, clear_artifacts);
       
   859     clear_artifacts = false;
   853   }
   860   }
   854   assert(_artifacts != NULL, "invariant");
   861   assert(_artifacts != NULL, "invariant");
   855   assert(!_artifacts->has_klass_entries(), "invariant");
   862   assert(!_artifacts->has_klass_entries(), "invariant");
   856 }
   863 }
   857 
   864