223 return "Medium: Depends on Java heap size and content."; 224 } 225 static int num_arguments() { return 0; } 226 virtual void execute(DCmdSource source, TRAPS); 227 }; 228 229 class RunFinalizationDCmd : public DCmd { 230 public: 231 RunFinalizationDCmd(outputStream* output, bool heap) : DCmd(output, heap) { } 232 static const char* name() { return "GC.run_finalization"; } 233 static const char* description() { 234 return "Call java.lang.System.runFinalization()."; 235 } 236 static const char* impact() { 237 return "Medium: Depends on Java content."; 238 } 239 static int num_arguments() { return 0; } 240 virtual void execute(DCmdSource source, TRAPS); 241 }; 242 243 #if INCLUDE_SERVICES // Heap dumping supported 244 // See also: dump_heap in attachListener.cpp 245 class HeapDumpDCmd : public DCmdWithParser { 246 protected: 247 DCmdArgument<char*> _filename; 248 DCmdArgument<bool> _all; 249 public: 250 HeapDumpDCmd(outputStream* output, bool heap); 251 static const char* name() { 252 return "GC.heap_dump"; 253 } 254 static const char* description() { 255 return "Generate a HPROF format dump of the Java heap."; 256 } 257 static const char* impact() { 258 return "High: Depends on Java heap size and content. " 259 "Request a full GC unless the '-all' option is specified."; 260 } 261 static const JavaPermission permission() { 262 JavaPermission p = {"java.lang.management.ManagementPermission", | 223 return "Medium: Depends on Java heap size and content."; 224 } 225 static int num_arguments() { return 0; } 226 virtual void execute(DCmdSource source, TRAPS); 227 }; 228 229 class RunFinalizationDCmd : public DCmd { 230 public: 231 RunFinalizationDCmd(outputStream* output, bool heap) : DCmd(output, heap) { } 232 static const char* name() { return "GC.run_finalization"; } 233 static const char* description() { 234 return "Call java.lang.System.runFinalization()."; 235 } 236 static const char* impact() { 237 return "Medium: Depends on Java content."; 238 } 239 static int num_arguments() { return 0; } 240 virtual void execute(DCmdSource source, TRAPS); 241 }; 242 243 class HeapInfoDCmd : public DCmd { 244 public: 245 HeapInfoDCmd(outputStream* output, bool heap) : DCmd(output, heap) { } 246 static const char* name() { return "GC.heap_info"; } 247 static const char* description() { 248 return "Provide generic Java heap information."; 249 } 250 static const char* impact() { 251 return "Medium"; 252 } 253 static int num_arguments() { return 0; } 254 static const JavaPermission permission() { 255 JavaPermission p = {"java.lang.management.ManagementPermission", 256 "monitor", NULL}; 257 return p; 258 } 259 260 virtual void execute(DCmdSource source, TRAPS); 261 }; 262 263 class FinalizerInfoDCmd : public DCmd { 264 public: 265 FinalizerInfoDCmd(outputStream* output, bool heap) : DCmd(output, heap) { } 266 static const char* name() { return "GC.finalizer_info"; } 267 static const char* description() { 268 return "Provide information about Java finalization queue."; 269 } 270 static const char* impact() { 271 return "Medium"; 272 } 273 static int num_arguments() { return 0; } 274 static const JavaPermission permission() { 275 JavaPermission p = {"java.lang.management.ManagementPermission", 276 "monitor", NULL}; 277 return p; 278 } 279 280 virtual void execute(DCmdSource source, TRAPS); 281 }; 282 283 #if INCLUDE_SERVICES // Heap dumping supported 284 // See also: dump_heap in attachListener.cpp 285 class HeapDumpDCmd : public DCmdWithParser { 286 protected: 287 DCmdArgument<char*> _filename; 288 DCmdArgument<bool> _all; 289 public: 290 HeapDumpDCmd(outputStream* output, bool heap); 291 static const char* name() { 292 return "GC.heap_dump"; 293 } 294 static const char* description() { 295 return "Generate a HPROF format dump of the Java heap."; 296 } 297 static const char* impact() { 298 return "High: Depends on Java heap size and content. " 299 "Request a full GC unless the '-all' option is specified."; 300 } 301 static const JavaPermission permission() { 302 JavaPermission p = {"java.lang.management.ManagementPermission", |