# HG changeset patch # User zgu # Date 1347914246 14400 # Node ID 9a86ddfc6c8f1d73bacf9877da1896e456ab9a48 # Parent 716e6ef4482a8f389d6c3a7c577e0e1206eb860d 7188594: Print statistic collected by NMT with VM flag Summary: Print out statistics of collected NMT data if it is on at VM exits Reviewed-by: kvn, coleenp, twisti diff -r 716e6ef4482a -r 9a86ddfc6c8f src/share/vm/runtime/arguments.cpp --- a/src/share/vm/runtime/arguments.cpp Mon Sep 17 10:20:04 2012 -0400 +++ b/src/share/vm/runtime/arguments.cpp Mon Sep 17 16:37:26 2012 -0400 @@ -1978,6 +1978,12 @@ status = status && verify_min_value(ClassMetaspaceSize, 1*M, "ClassMetaspaceSize"); + // check native memory tracking flags + if (PrintNMTStatistics && MemTracker::tracking_level() == MemTracker::NMT_off) { + warning("PrintNMTStatistics is disabled, because native memory tracking is not enabled"); + PrintNMTStatistics = false; + } + return status; } diff -r 716e6ef4482a -r 9a86ddfc6c8f src/share/vm/runtime/globals.hpp --- a/src/share/vm/runtime/globals.hpp Mon Sep 17 10:20:04 2012 -0400 +++ b/src/share/vm/runtime/globals.hpp Mon Sep 17 16:37:26 2012 -0400 @@ -863,6 +863,9 @@ product(ccstr, NativeMemoryTracking, "off", \ "Native memory tracking options") \ \ + diagnostic(bool, PrintNMTStatistics, false, \ + "Print native memory tracking summary data if it is on") \ + \ diagnostic(bool, LogCompilation, false, \ "Log compilation activity in detail to hotspot.log or LogFile") \ \ diff -r 716e6ef4482a -r 9a86ddfc6c8f src/share/vm/runtime/java.cpp --- a/src/share/vm/runtime/java.cpp Mon Sep 17 10:20:04 2012 -0400 +++ b/src/share/vm/runtime/java.cpp Mon Sep 17 16:37:26 2012 -0400 @@ -56,6 +56,8 @@ #include "runtime/task.hpp" #include "runtime/timer.hpp" #include "runtime/vm_operations.hpp" +#include "services/memReporter.hpp" +#include "services/memTracker.hpp" #include "trace/tracing.hpp" #include "trace/traceEventTypes.hpp" #include "utilities/dtrace.hpp" @@ -359,6 +361,15 @@ } #endif // COMPILER2 #endif // ENABLE_ZAP_DEAD_LOCALS + // Native memory tracking data + if (PrintNMTStatistics) { + if (MemTracker::is_on()) { + BaselineTTYOutputer outputer(tty); + MemTracker::print_memory_usage(outputer, K, false); + } else { + tty->print_cr(MemTracker::reason()); + } + } } #else // PRODUCT MODE STATISTICS @@ -376,6 +387,16 @@ if (PrintBiasedLockingStatistics) { BiasedLocking::print_counters(); } + + // Native memory tracking data + if (PrintNMTStatistics) { + if (MemTracker::is_on()) { + BaselineTTYOutputer outputer(tty); + MemTracker::print_memory_usage(outputer, K, false); + } else { + tty->print_cr(MemTracker::reason()); + } + } } #endif diff -r 716e6ef4482a -r 9a86ddfc6c8f src/share/vm/services/memTracker.hpp --- a/src/share/vm/services/memTracker.hpp Mon Sep 17 10:20:04 2012 -0400 +++ b/src/share/vm/services/memTracker.hpp Mon Sep 17 16:37:26 2012 -0400 @@ -85,7 +85,7 @@ NMT_shutdown // shutdown }; - + public: // native memory tracking level enum NMTLevel { NMT_off, // native memory tracking is off @@ -93,7 +93,6 @@ NMT_detail // track callsite also }; - public: enum ShutdownReason { NMT_shutdown_none, // no shutdown requested NMT_shutdown_user, // user requested shutdown @@ -117,6 +116,10 @@ _state >= NMT_bootstrapping_single_thread); } + static inline enum NMTLevel tracking_level() { + return _tracking_level; + } + // user readable reason for shutting down NMT static const char* reason() { switch(_reason) {