369 ClassHierarchyDCmd(outputStream* output, bool heap);
370 static const char* name() {
371 return "VM.class_hierarchy";
372 }
373 static const char* description() {
374 return "Print a list of all loaded classes, indented to show the class hierarchy. "
375 "The name of each class is followed by the ClassLoaderData* of its ClassLoader, "
376 "or \"null\" if loaded by the bootstrap class loader.";
377 }
378 static const char* impact() {
379 return "Medium: Depends on number of loaded classes.";
380 }
381 static const JavaPermission permission() {
382 JavaPermission p = {"java.lang.management.ManagementPermission",
383 "monitor", NULL};
384 return p;
385 }
386 virtual void execute(DCmdSource source, TRAPS);
387 };
388
389 #if INCLUDE_CDS
390 class DumpSharedArchiveDCmd: public DCmdWithParser {
391 protected:
392 DCmdArgument<char*> _suboption; // option of VM.cds
393 DCmdArgument<char*> _filename; // file name, optional
394 public:
395 DumpSharedArchiveDCmd(outputStream* output, bool heap);
396 static const char* name() {
397 return "VM.cds";
398 }
399 static const char* description() {
400 return "Dump a static or dynamic shared archive including all shareable classes";
401 }
402 static const char* impact() {
403 return "Medium: Pause time depends on number of loaded classes";
404 }
405 static const JavaPermission permission() {
406 JavaPermission p = {"java.lang.management.ManagementPermission",
407 "monitor", NULL};
408 return p;
|
369 ClassHierarchyDCmd(outputStream* output, bool heap);
370 static const char* name() {
371 return "VM.class_hierarchy";
372 }
373 static const char* description() {
374 return "Print a list of all loaded classes, indented to show the class hierarchy. "
375 "The name of each class is followed by the ClassLoaderData* of its ClassLoader, "
376 "or \"null\" if loaded by the bootstrap class loader.";
377 }
378 static const char* impact() {
379 return "Medium: Depends on number of loaded classes.";
380 }
381 static const JavaPermission permission() {
382 JavaPermission p = {"java.lang.management.ManagementPermission",
383 "monitor", NULL};
384 return p;
385 }
386 virtual void execute(DCmdSource source, TRAPS);
387 };
388
389 class PrintClassLayoutDCmd : public DCmdWithParser {
390 protected:
391 DCmdArgument<char*> _classname; // lass name whose layout should be printed.
392 public:
393 PrintClassLayoutDCmd(outputStream* output, bool heap);
394 static const char* name() {
395 return "VM.class_print_layout";
396 }
397 static const char* description() {
398 return "Print the layout of an instance of a class, including inlined fields. "
399 "The name of each class is followed by the ClassLoaderData* of its ClassLoader, "
400 "or \"null\" if loaded by the bootstrap class loader.";
401 }
402 static const char* impact() {
403 return "Medium: Depends on number of loaded classes.";
404 }
405 static const JavaPermission permission() {
406 JavaPermission p = {"java.lang.management.ManagementPermission",
407 "monitor", NULL};
408 return p;
409 }
410 static int num_arguments();
411 virtual void execute(DCmdSource source, TRAPS);
412 };
413
414 #if INCLUDE_CDS
415 class DumpSharedArchiveDCmd: public DCmdWithParser {
416 protected:
417 DCmdArgument<char*> _suboption; // option of VM.cds
418 DCmdArgument<char*> _filename; // file name, optional
419 public:
420 DumpSharedArchiveDCmd(outputStream* output, bool heap);
421 static const char* name() {
422 return "VM.cds";
423 }
424 static const char* description() {
425 return "Dump a static or dynamic shared archive including all shareable classes";
426 }
427 static const char* impact() {
428 return "Medium: Pause time depends on number of loaded classes";
429 }
430 static const JavaPermission permission() {
431 JavaPermission p = {"java.lang.management.ManagementPermission",
432 "monitor", NULL};
433 return p;
|