8190357: NMT: Include metadata information in NMT final report when PrintNMTStatistics is on

Include metadata information in NMT final report

Reviewed-by: adinn, stuefe
diff --git a/src/hotspot/share/services/memTracker.cpp b/src/hotspot/share/services/memTracker.cpp
index c930da6..1417d9c 100644
--- a/src/hotspot/share/services/memTracker.cpp
+++ b/src/hotspot/share/services/memTracker.cpp
@@ -25,11 +25,14 @@
 #include "jvm.h"
 
 #include "runtime/mutex.hpp"
+#include "runtime/vmThread.hpp"
+#include "runtime/vm_operations.hpp"
 #include "services/memBaseline.hpp"
 #include "services/memReporter.hpp"
 #include "services/mallocTracker.inline.hpp"
 #include "services/memTracker.hpp"
 #include "utilities/defaultStream.hpp"
+#include "utilities/vmError.hpp"
 
 #ifdef SOLARIS
   volatile bool NMT_stack_walkable = false;
@@ -173,6 +176,11 @@
     } else {
       MemDetailReporter rpt(baseline, output);
       rpt.report();
+
+      // Metadata reporting requires a safepoint, so avoid it if VM is not in good state.
+      assert(!VMError::fatal_error_in_progress(), "Do not report metadata in error report");
+      VM_PrintMetadata vmop(output, K);
+      VMThread::execute(&vmop);
     }
   }
 }