< prev index next >

src/hotspot/share/services/diagnosticCommand.cpp

Print this page

        

*** 94,103 **** --- 94,104 ---- DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<SystemDictionaryDCmd>(full_export, true, false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<ClassHierarchyDCmd>(full_export, true, false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<SymboltableDCmd>(full_export, true, false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<StringtableDCmd>(full_export, true, false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<metaspace::MetaspaceDCmd>(full_export, true, false)); + DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<PrintClassLayoutDCmd>(full_export, true, false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<EventLogDCmd>(full_export, true, false)); #if INCLUDE_JVMTI // Both JVMTI and SERVICES have to be enabled to have this dcmd DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JVMTIAgentLoadDCmd>(full_export, true, false)); #endif // INCLUDE_JVMTI #endif // INCLUDE_SERVICES
*** 124,134 **** uint32_t jmx_agent_export_flags = DCmd_Source_Internal | DCmd_Source_AttachAPI; DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JMXStartRemoteDCmd>(jmx_agent_export_flags, true,false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JMXStartLocalDCmd>(jmx_agent_export_flags, true,false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JMXStopRemoteDCmd>(jmx_agent_export_flags, true,false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JMXStatusDCmd>(jmx_agent_export_flags, true,false)); - // Debug on cmd (only makes sense with JVMTI since the agentlib needs it). #if INCLUDE_JVMTI DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<DebugOnCmdStartDCmd>(full_export, true, false)); #endif // INCLUDE_JVMTI --- 125,134 ----
*** 1076,1085 **** --- 1076,1108 ---- } } #endif + PrintClassLayoutDCmd::PrintClassLayoutDCmd(outputStream* output, bool heap) : + DCmdWithParser(output, heap), + _classname("classname", "Name of class whose layout should be printed. ", + "STRING", true) { + _dcmdparser.add_dcmd_argument(&_classname); + } + + void PrintClassLayoutDCmd::execute(DCmdSource source, TRAPS) { + VM_PrintClassLayout printClassLayoutOp(output(), _classname.value()); + VMThread::execute(&printClassLayoutOp); + } + + int PrintClassLayoutDCmd::num_arguments() { + ResourceMark rm; + PrintClassLayoutDCmd* dcmd = new PrintClassLayoutDCmd(NULL, false); + if (dcmd != NULL) { + DCmdMark mark(dcmd); + return dcmd->_dcmdparser.num_arguments(); + } else { + return 0; + } + } + class VM_DumpTouchedMethods : public VM_Operation { private: outputStream* _out; public: VM_DumpTouchedMethods(outputStream* out) {
< prev index next >