--- 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<KlassPtr, ClearArtifact> ClearKlassBits;
typedef Wrapper<MethodPtr, ClearArtifact> ClearMethodFlag;
typedef MethodIteratorHost<ClearMethodFlag, ClearKlassBits, false> 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");