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 #if INCLUDE_CDS
329 class AOTEndTrainingDCmd : public DCmd {
330 public:
331 AOTEndTrainingDCmd(outputStream* output, bool heap) : DCmd(output, heap) { }
332 static const char* name() { return "AOT.end_training"; }
333 static const char* description() {
334 return "End AOT training and create the cache.";
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
348 public:
349 static int num_arguments() { return 2; }
350 DumpSharedArchiveDCmd(outputStream* output, bool heap);
351 static const char* name() {
352 return "VM.cds";
353 }
354 static const char* description() {
355 return "Dump a static or dynamic shared archive including all shareable classes";
356 }
357 static const char* impact() {
358 return "Medium: Pause time depends on number of loaded classes";
359 }
360 virtual void execute(DCmdSource source, TRAPS);
361 };
362 #endif // INCLUDE_CDS
|