308 DCmdArgument<bool> _print_interfaces; // true if inherited interfaces should be printed.
309 DCmdArgument<bool> _print_subclasses; // true if subclasses of the specified classname should be printed.
310 DCmdArgument<char*> _classname; // Optional single class name whose hierarchy should be printed.
311 public:
312 static int num_arguments() { return 3; }
313 ClassHierarchyDCmd(outputStream* output, bool heap);
314 static const char* name() {
315 return "VM.class_hierarchy";
316 }
317 static const char* description() {
318 return "Print a list of all loaded classes, indented to show the class hierarchy. "
319 "The name of each class is followed by the ClassLoaderData* of its ClassLoader, "
320 "or \"null\" if loaded by the bootstrap class loader.";
321 }
322 static const char* impact() {
323 return "Medium: Depends on number of loaded classes.";
324 }
325 virtual void execute(DCmdSource source, TRAPS);
326 };
327
328 #if INCLUDE_CDS
329 class DumpSharedArchiveDCmd: public DCmdWithParser {
330 protected:
331 DCmdArgument<char*> _suboption; // option of VM.cds
332 DCmdArgument<char*> _filename; // file name, optional
333 public:
334 static int num_arguments() { return 2; }
335 DumpSharedArchiveDCmd(outputStream* output, bool heap);
336 static const char* name() {
337 return "VM.cds";
338 }
339 static const char* description() {
340 return "Dump a static or dynamic shared archive including all shareable classes";
341 }
342 static const char* impact() {
343 return "Medium: Pause time depends on number of loaded classes";
344 }
345 virtual void execute(DCmdSource source, TRAPS);
346 };
347 #endif // INCLUDE_CDS
|
308 DCmdArgument<bool> _print_interfaces; // true if inherited interfaces should be printed.
309 DCmdArgument<bool> _print_subclasses; // true if subclasses of the specified classname should be printed.
310 DCmdArgument<char*> _classname; // Optional single class name whose hierarchy should be printed.
311 public:
312 static int num_arguments() { return 3; }
313 ClassHierarchyDCmd(outputStream* output, bool heap);
314 static const char* name() {
315 return "VM.class_hierarchy";
316 }
317 static const char* description() {
318 return "Print a list of all loaded classes, indented to show the class hierarchy. "
319 "The name of each class is followed by the ClassLoaderData* of its ClassLoader, "
320 "or \"null\" if loaded by the bootstrap class loader.";
321 }
322 static const char* impact() {
323 return "Medium: Depends on number of loaded classes.";
324 }
325 virtual void execute(DCmdSource source, TRAPS);
326 };
327
328 class PrintClassLayoutDCmd : public DCmdWithParser {
329 protected:
330 DCmdArgument<char*> _classname; // lass name whose layout should be printed.
331 public:
332 PrintClassLayoutDCmd(outputStream* output, bool heap);
333 static const char* name() {
334 return "VM.class_print_layout";
335 }
336 static const char* description() {
337 return "Print the layout of an instance of a class, including flat fields. "
338 "The name of each class is followed by the ClassLoaderData* of its ClassLoader, "
339 "or \"null\" if loaded by the bootstrap class loader.";
340 }
341 static const char* impact() {
342 return "Medium: Depends on number of loaded classes.";
343 }
344 static int num_arguments();
345 virtual void execute(DCmdSource source, TRAPS);
346 };
347
348 #if INCLUDE_CDS
349 class DumpSharedArchiveDCmd: public DCmdWithParser {
350 protected:
351 DCmdArgument<char*> _suboption; // option of VM.cds
352 DCmdArgument<char*> _filename; // file name, optional
353 public:
354 static int num_arguments() { return 2; }
355 DumpSharedArchiveDCmd(outputStream* output, bool heap);
356 static const char* name() {
357 return "VM.cds";
358 }
359 static const char* description() {
360 return "Dump a static or dynamic shared archive including all shareable classes";
361 }
362 static const char* impact() {
363 return "Medium: Pause time depends on number of loaded classes";
364 }
365 virtual void execute(DCmdSource source, TRAPS);
366 };
367 #endif // INCLUDE_CDS
|