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