From d29d5bfb7fae35cb9f025c5a20e551a1391e38aa Mon Sep 17 00:00:00 2001 From: Thomas Stuefe Date: Sat, 1 Jun 2024 08:19:07 +0000 Subject: [PATCH] 8333290: NMT report should not print Metaspace info if Metaspace is not yet initialized Reviewed-by: stefank, dholmes --- src/hotspot/share/memory/metaspace/runningCounters.cpp | 3 +++ src/hotspot/share/nmt/memReporter.cpp | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/src/hotspot/share/memory/metaspace/runningCounters.cpp b/src/hotspot/share/memory/metaspace/runningCounters.cpp index 08dffc5c64c..323862ac02f 100644 --- a/src/hotspot/share/memory/metaspace/runningCounters.cpp +++ b/src/hotspot/share/memory/metaspace/runningCounters.cpp @@ -45,6 +45,7 @@ size_t RunningCounters::reserved_words_class() { } size_t RunningCounters::reserved_words_nonclass() { + assert(VirtualSpaceList::vslist_nonclass() != nullptr, "Metaspace not yet initialized"); return VirtualSpaceList::vslist_nonclass()->reserved_words(); } @@ -59,6 +60,7 @@ size_t RunningCounters::committed_words_class() { } size_t RunningCounters::committed_words_nonclass() { + assert(VirtualSpaceList::vslist_nonclass() != nullptr, "Metaspace not yet initialized"); return VirtualSpaceList::vslist_nonclass()->committed_words(); } @@ -90,6 +92,7 @@ size_t RunningCounters::free_chunks_words_class() { } size_t RunningCounters::free_chunks_words_nonclass() { + assert(ChunkManager::chunkmanager_nonclass() != nullptr, "Metaspace not yet initialized"); return ChunkManager::chunkmanager_nonclass()->total_word_size(); } diff --git a/src/hotspot/share/nmt/memReporter.cpp b/src/hotspot/share/nmt/memReporter.cpp index 96ad3c5cb1a..d1de2863749 100644 --- a/src/hotspot/share/nmt/memReporter.cpp +++ b/src/hotspot/share/nmt/memReporter.cpp @@ -272,6 +272,13 @@ void MemSummaryReporter::report_summary_of_type(MEMFLAGS flag, } void MemSummaryReporter::report_metadata(Metaspace::MetadataType type) const { + + // NMT reports may be triggered (as part of error handling) very early. Make sure + // Metaspace is already initialized. + if (!Metaspace::initialized()) { + return; + } + assert(type == Metaspace::NonClassType || type == Metaspace::ClassType, "Invalid metadata type"); const char* name = (type == Metaspace::NonClassType) ?