181 return "Medium: Depends on Java heap size and content."; 182 } 183 static int num_arguments() { return 0; } 184 virtual void execute(DCmdSource source, TRAPS); 185 }; 186 187 class RunFinalizationDCmd : public DCmd { 188 public: 189 RunFinalizationDCmd(outputStream* output, bool heap) : DCmd(output, heap) { } 190 static const char* name() { return "GC.run_finalization"; } 191 static const char* description() { 192 return "Call java.lang.System.runFinalization()."; 193 } 194 static const char* impact() { 195 return "Medium: Depends on Java content."; 196 } 197 static int num_arguments() { return 0; } 198 virtual void execute(DCmdSource source, TRAPS); 199 }; 200 201 #if INCLUDE_SERVICES // Heap dumping supported 202 // See also: dump_heap in attachListener.cpp 203 class HeapDumpDCmd : public DCmdWithParser { 204 protected: 205 DCmdArgument<char*> _filename; 206 DCmdArgument<bool> _all; 207 public: 208 HeapDumpDCmd(outputStream* output, bool heap); 209 static const char* name() { 210 return "GC.heap_dump"; 211 } 212 static const char* description() { 213 return "Generate a HPROF format dump of the Java heap."; 214 } 215 static const char* impact() { 216 return "High: Depends on Java heap size and content. " 217 "Request a full GC unless the '-all' option is specified."; 218 } 219 static const JavaPermission permission() { 220 JavaPermission p = {"java.lang.management.ManagementPermission", | 181 return "Medium: Depends on Java heap size and content."; 182 } 183 static int num_arguments() { return 0; } 184 virtual void execute(DCmdSource source, TRAPS); 185 }; 186 187 class RunFinalizationDCmd : public DCmd { 188 public: 189 RunFinalizationDCmd(outputStream* output, bool heap) : DCmd(output, heap) { } 190 static const char* name() { return "GC.run_finalization"; } 191 static const char* description() { 192 return "Call java.lang.System.runFinalization()."; 193 } 194 static const char* impact() { 195 return "Medium: Depends on Java content."; 196 } 197 static int num_arguments() { return 0; } 198 virtual void execute(DCmdSource source, TRAPS); 199 }; 200 201 class HeapInfoDCmd : public DCmd { 202 public: 203 HeapInfoDCmd(outputStream* output, bool heap) : DCmd(output, heap) { } 204 static const char* name() { return "GC.heap_info"; } 205 static const char* description() { 206 return "Provide generic Java heap information."; 207 } 208 static const char* impact() { 209 return "Low"; 210 } 211 static int num_arguments() { return 0; } 212 static const JavaPermission permission() { 213 JavaPermission p = {"java.lang.management.ManagementPermission", 214 "monitor", NULL}; 215 return p; 216 } 217 218 virtual void execute(DCmdSource source, TRAPS); 219 }; 220 221 class FinalizerInfoDCmd : public DCmd { 222 public: 223 FinalizerInfoDCmd(outputStream* output, bool heap) : DCmd(output, heap) { } 224 static const char* name() { return "GC.finalizer_info"; } 225 static const char* description() { 226 return "Provide information about Java finalization queue."; 227 } 228 static const char* impact() { 229 return "Low"; 230 } 231 static int num_arguments() { return 0; } 232 static const JavaPermission permission() { 233 JavaPermission p = {"java.lang.management.ManagementPermission", 234 "monitor", NULL}; 235 return p; 236 } 237 238 virtual void execute(DCmdSource source, TRAPS); 239 }; 240 241 #if INCLUDE_SERVICES // Heap dumping supported 242 // See also: dump_heap in attachListener.cpp 243 class HeapDumpDCmd : public DCmdWithParser { 244 protected: 245 DCmdArgument<char*> _filename; 246 DCmdArgument<bool> _all; 247 public: 248 HeapDumpDCmd(outputStream* output, bool heap); 249 static const char* name() { 250 return "GC.heap_dump"; 251 } 252 static const char* description() { 253 return "Generate a HPROF format dump of the Java heap."; 254 } 255 static const char* impact() { 256 return "High: Depends on Java heap size and content. " 257 "Request a full GC unless the '-all' option is specified."; 258 } 259 static const JavaPermission permission() { 260 JavaPermission p = {"java.lang.management.ManagementPermission", |