diff -r 5851f445c684 -r c4067538a0f2 src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeSet.cpp --- a/src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeSet.cpp Sat Sep 21 12:31:40 2019 +0200 +++ b/src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeSet.cpp Sat Sep 21 12:33:26 2019 +0200 @@ -824,6 +824,12 @@ _artifacts->tally(sw); } +static bool clear_artifacts = false; + +void JfrTypeSet::clear() { + clear_artifacts = true; +} + typedef Wrapper ClearKlassBits; typedef Wrapper ClearMethodFlag; typedef MethodIteratorHost ClearKlassAndMethods; @@ -835,7 +841,7 @@ assert(_writer != NULL, "invariant"); ClearKlassAndMethods clear(_writer); _artifacts->iterate_klasses(clear); - _artifacts->clear(); + JfrTypeSet::clear(); ++checkpoint_id; } return total_count; @@ -849,7 +855,8 @@ if (_artifacts == NULL) { _artifacts = new JfrArtifactSet(class_unload); } else { - _artifacts->initialize(class_unload); + _artifacts->initialize(class_unload, clear_artifacts); + clear_artifacts = false; } assert(_artifacts != NULL, "invariant"); assert(!_artifacts->has_klass_entries(), "invariant");