1.1 --- a/src/share/vm/services/diagnosticCommand.hpp Thu Jan 05 17:16:13 2012 -0500 1.2 +++ b/src/share/vm/services/diagnosticCommand.hpp Mon Jan 09 10:27:24 2012 +0100 1.3 @@ -35,9 +35,8 @@ 1.4 #include "services/diagnosticCommand.hpp" 1.5 #include "services/diagnosticFramework.hpp" 1.6 1.7 -class HelpDCmd : public DCmd { 1.8 +class HelpDCmd : public DCmdWithParser { 1.9 protected: 1.10 - DCmdParser _dcmdparser; 1.11 DCmdArgument<bool> _all; 1.12 DCmdArgument<char*> _cmd; 1.13 public: 1.14 @@ -50,13 +49,7 @@ 1.15 } 1.16 static const char* impact() { return "Low: "; } 1.17 static int num_arguments(); 1.18 - virtual void parse(CmdLine* line, char delim, TRAPS); 1.19 virtual void execute(TRAPS); 1.20 - virtual void reset(TRAPS); 1.21 - virtual void cleanup(); 1.22 - virtual void print_help(outputStream* out); 1.23 - virtual GrowableArray<const char*>* argument_name_array(); 1.24 - virtual GrowableArray<DCmdArgumentInfo*>* argument_info_array(); 1.25 }; 1.26 1.27 class VersionDCmd : public DCmd { 1.28 @@ -68,9 +61,156 @@ 1.29 } 1.30 static const char* impact() { return "Low: "; } 1.31 static int num_arguments() { return 0; } 1.32 - virtual void parse(CmdLine* line, char delim, TRAPS) { } 1.33 virtual void execute(TRAPS); 1.34 - virtual void print_help(outputStream* out) { } 1.35 +}; 1.36 + 1.37 +class CommandLineDCmd : public DCmd { 1.38 +public: 1.39 + CommandLineDCmd(outputStream* output, bool heap) : DCmd(output, heap) { } 1.40 + static const char* name() { return "VM.command_line"; } 1.41 + static const char* description() { 1.42 + return "Print the command line used to start this VM instance."; 1.43 + } 1.44 + static const char* impact() { return "Low: "; } 1.45 + static int num_arguments() { return 0; } 1.46 + virtual void execute(TRAPS) { 1.47 + Arguments::print_on(_output); 1.48 + } 1.49 +}; 1.50 + 1.51 +// See also: get_system_properties in attachListener.cpp 1.52 +class PrintSystemPropertiesDCmd : public DCmd { 1.53 +public: 1.54 + PrintSystemPropertiesDCmd(outputStream* output, bool heap) : DCmd(output, heap) { } 1.55 + static const char* name() { return "VM.system_properties"; } 1.56 + static const char* description() { 1.57 + return "Print system properties."; 1.58 + } 1.59 + static const char* impact() { 1.60 + return "Low: "; 1.61 + } 1.62 + static int num_arguments() { return 0; } 1.63 + virtual void execute(TRAPS); 1.64 +}; 1.65 + 1.66 +// See also: print_flag in attachListener.cpp 1.67 +class PrintVMFlagsDCmd : public DCmdWithParser { 1.68 +protected: 1.69 + DCmdArgument<bool> _all; 1.70 +public: 1.71 + PrintVMFlagsDCmd(outputStream* output, bool heap); 1.72 + static const char* name() { return "VM.flags"; } 1.73 + static const char* description() { 1.74 + return "Print VM flag options and their current values."; 1.75 + } 1.76 + static const char* impact() { 1.77 + return "Low: "; 1.78 + } 1.79 + static int num_arguments(); 1.80 + virtual void execute(TRAPS); 1.81 +}; 1.82 + 1.83 +class VMUptimeDCmd : public DCmdWithParser { 1.84 +protected: 1.85 + DCmdArgument<bool> _date; 1.86 +public: 1.87 + VMUptimeDCmd(outputStream* output, bool heap); 1.88 + static const char* name() { return "VM.uptime"; } 1.89 + static const char* description() { 1.90 + return "Print VM uptime."; 1.91 + } 1.92 + static const char* impact() { 1.93 + return "Low: "; 1.94 + } 1.95 + static int num_arguments(); 1.96 + virtual void execute(TRAPS); 1.97 +}; 1.98 + 1.99 +class SystemGCDCmd : public DCmd { 1.100 +public: 1.101 + SystemGCDCmd(outputStream* output, bool heap) : DCmd(output, heap) { } 1.102 + static const char* name() { return "GC.run"; } 1.103 + static const char* description() { 1.104 + return "Call java.lang.System.gc()."; 1.105 + } 1.106 + static const char* impact() { 1.107 + return "Medium: Depends on Java heap size and content."; 1.108 + } 1.109 + static int num_arguments() { return 0; } 1.110 + virtual void execute(TRAPS); 1.111 +}; 1.112 + 1.113 +class RunFinalizationDCmd : public DCmd { 1.114 +public: 1.115 + RunFinalizationDCmd(outputStream* output, bool heap) : DCmd(output, heap) { } 1.116 + static const char* name() { return "GC.run_finalization"; } 1.117 + static const char* description() { 1.118 + return "Call java.lang.System.runFinalization()."; 1.119 + } 1.120 + static const char* impact() { 1.121 + return "Medium: Depends on Java content."; 1.122 + } 1.123 + static int num_arguments() { return 0; } 1.124 + virtual void execute(TRAPS); 1.125 +}; 1.126 + 1.127 +#ifndef SERVICES_KERNEL // Heap dumping not supported 1.128 +// See also: dump_heap in attachListener.cpp 1.129 +class HeapDumpDCmd : public DCmdWithParser { 1.130 +protected: 1.131 + DCmdArgument<char*> _filename; 1.132 + DCmdArgument<bool> _all; 1.133 +public: 1.134 + HeapDumpDCmd(outputStream* output, bool heap); 1.135 + static const char* name() { 1.136 + return "GC.heap_dump"; 1.137 + } 1.138 + static const char* description() { 1.139 + return "Generate a HPROF format dump of the Java heap."; 1.140 + } 1.141 + static const char* impact() { 1.142 + return "High: Depends on Java heap size and content. " 1.143 + "Request a full GC unless the '-all' option is specified."; 1.144 + } 1.145 + static int num_arguments(); 1.146 + virtual void execute(TRAPS); 1.147 +}; 1.148 +#endif // SERVICES_KERNEL 1.149 + 1.150 +// See also: inspeactheap in attachListener.cpp 1.151 +class ClassHistogramDCmd : public DCmdWithParser { 1.152 +protected: 1.153 + DCmdArgument<bool> _all; 1.154 +public: 1.155 + ClassHistogramDCmd(outputStream* output, bool heap); 1.156 + static const char* name() { 1.157 + return "GC.class_histogram"; 1.158 + } 1.159 + static const char* description() { 1.160 + return "Provide statistics about the Java heap usage."; 1.161 + } 1.162 + static const char* impact() { 1.163 + return "High: Depends on Java heap size and content."; 1.164 + } 1.165 + static int num_arguments(); 1.166 + virtual void execute(TRAPS); 1.167 +}; 1.168 + 1.169 +// See also: thread_dump in attachListener.cpp 1.170 +class ThreadDumpDCmd : public DCmdWithParser { 1.171 +protected: 1.172 + DCmdArgument<bool> _locks; 1.173 +public: 1.174 + ThreadDumpDCmd(outputStream* output, bool heap); 1.175 + static const char* name() { return "Thread.print"; } 1.176 + static const char* description() { 1.177 + return "Print all threads with stacktraces."; 1.178 + } 1.179 + static const char* impact() { 1.180 + return "Medium: Depends on the number of threads."; 1.181 + } 1.182 + static int num_arguments(); 1.183 + virtual void execute(TRAPS); 1.184 }; 1.185 1.186 #endif // SHARE_VM_SERVICES_DIAGNOSTICCOMMAND_HPP