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 AOTEndRecordingDCmd : public DCmd {
330 public:
331 AOTEndRecordingDCmd(outputStream* output, bool heap) : DCmd(output, heap) { }
332 static const char* name() { return "AOT.end_recording"; }
333 static const char* description() {
334 return "End AOT recording.";
335 }
336 static const char* impact() {
337 return "Medium: Pause time depends on number of loaded classes";
338 }
339 virtual void execute(DCmdSource source, TRAPS);
340 };
341 #endif // INCLUDE_CDS
342
343 #if INCLUDE_CDS
344 class DumpSharedArchiveDCmd: public DCmdWithParser {
345 protected:
346 DCmdArgument<char*> _suboption; // option of VM.cds
347 DCmdArgument<char*> _filename; // file name, optional
|
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 AOTEndRecordingDCmd : public DCmd {
350 public:
351 AOTEndRecordingDCmd(outputStream* output, bool heap) : DCmd(output, heap) { }
352 static const char* name() { return "AOT.end_recording"; }
353 static const char* description() {
354 return "End AOT recording.";
355 }
356 static const char* impact() {
357 return "Medium: Pause time depends on number of loaded classes";
358 }
359 virtual void execute(DCmdSource source, TRAPS);
360 };
361 #endif // INCLUDE_CDS
362
363 #if INCLUDE_CDS
364 class DumpSharedArchiveDCmd: public DCmdWithParser {
365 protected:
366 DCmdArgument<char*> _suboption; // option of VM.cds
367 DCmdArgument<char*> _filename; // file name, optional
|