79 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<VersionDCmd>(full_export, true, false));
80 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CommandLineDCmd>(full_export, true, false));
81 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<PrintSystemPropertiesDCmd>(full_export, true, false));
82 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<PrintVMFlagsDCmd>(full_export, true, false));
83 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<SetVMFlagDCmd>(full_export, true, false));
84 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<VMDynamicLibrariesDCmd>(full_export, true, false));
85 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<VMUptimeDCmd>(full_export, true, false));
86 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<VMInfoDCmd>(full_export, true, false));
87 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<SystemGCDCmd>(full_export, true, false));
88 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<RunFinalizationDCmd>(full_export, true, false));
89 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<HeapInfoDCmd>(full_export, true, false));
90 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<FinalizerInfoDCmd>(full_export, true, false));
91 #if INCLUDE_SERVICES
92 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<HeapDumpDCmd>(DCmd_Source_Internal | DCmd_Source_AttachAPI, true, false));
93 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<ClassHistogramDCmd>(full_export, true, false));
94 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<SystemDictionaryDCmd>(full_export, true, false));
95 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<ClassHierarchyDCmd>(full_export, true, false));
96 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<SymboltableDCmd>(full_export, true, false));
97 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<StringtableDCmd>(full_export, true, false));
98 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<metaspace::MetaspaceDCmd>(full_export, true, false));
99 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<EventLogDCmd>(full_export, true, false));
100 #if INCLUDE_JVMTI // Both JVMTI and SERVICES have to be enabled to have this dcmd
101 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JVMTIAgentLoadDCmd>(full_export, true, false));
102 #endif // INCLUDE_JVMTI
103 #endif // INCLUDE_SERVICES
104 #if INCLUDE_JVMTI
105 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JVMTIDataDumpDCmd>(full_export, true, false));
106 #endif // INCLUDE_JVMTI
107 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<ThreadDumpDCmd>(full_export, true, false));
108 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<ClassLoaderStatsDCmd>(full_export, true, false));
109 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<ClassLoaderHierarchyDCmd>(full_export, true, false));
110 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CompileQueueDCmd>(full_export, true, false));
111 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CodeListDCmd>(full_export, true, false));
112 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CodeCacheDCmd>(full_export, true, false));
113 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<TouchedMethodsDCmd>(full_export, true, false));
114 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CodeHeapAnalyticsDCmd>(full_export, true, false));
115
116 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CompilerDirectivesPrintDCmd>(full_export, true, false));
117 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CompilerDirectivesAddDCmd>(full_export, true, false));
118 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CompilerDirectivesRemoveDCmd>(full_export, true, false));
119 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CompilerDirectivesClearDCmd>(full_export, true, false));
120
121 // Enhanced JMX Agent Support
122 // These commands won't be exported via the DiagnosticCommandMBean until an
123 // appropriate permission is created for them
124 uint32_t jmx_agent_export_flags = DCmd_Source_Internal | DCmd_Source_AttachAPI;
125 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JMXStartRemoteDCmd>(jmx_agent_export_flags, true,false));
126 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JMXStartLocalDCmd>(jmx_agent_export_flags, true,false));
127 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JMXStopRemoteDCmd>(jmx_agent_export_flags, true,false));
128 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JMXStatusDCmd>(jmx_agent_export_flags, true,false));
129
130 // Debug on cmd (only makes sense with JVMTI since the agentlib needs it).
131 #if INCLUDE_JVMTI
132 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<DebugOnCmdStartDCmd>(full_export, true, true));
133 #endif // INCLUDE_JVMTI
134
135 }
136
137 #ifndef HAVE_EXTRA_DCMD
138 void DCmdRegistrant::register_dcmds_ext(){
139 // Do nothing here
140 }
141 #endif
142
143
144 HelpDCmd::HelpDCmd(outputStream* output, bool heap) : DCmdWithParser(output, heap),
145 _all("-all", "Show help for all commands", "BOOLEAN", false, "false"),
146 _cmd("command name", "The name of the command for which we want help",
147 "STRING", false) {
148 _dcmdparser.add_dcmd_option(&_all);
149 _dcmdparser.add_dcmd_argument(&_cmd);
1012
1013 void ClassHierarchyDCmd::execute(DCmdSource source, TRAPS) {
1014 VM_PrintClassHierarchy printClassHierarchyOp(output(), _print_interfaces.value(),
1015 _print_subclasses.value(), _classname.value());
1016 VMThread::execute(&printClassHierarchyOp);
1017 }
1018
1019 int ClassHierarchyDCmd::num_arguments() {
1020 ResourceMark rm;
1021 ClassHierarchyDCmd* dcmd = new ClassHierarchyDCmd(NULL, false);
1022 if (dcmd != NULL) {
1023 DCmdMark mark(dcmd);
1024 return dcmd->_dcmdparser.num_arguments();
1025 } else {
1026 return 0;
1027 }
1028 }
1029
1030 #endif
1031
1032 class VM_DumpTouchedMethods : public VM_Operation {
1033 private:
1034 outputStream* _out;
1035 public:
1036 VM_DumpTouchedMethods(outputStream* out) {
1037 _out = out;
1038 }
1039
1040 virtual VMOp_Type type() const { return VMOp_DumpTouchedMethods; }
1041
1042 virtual void doit() {
1043 Method::print_touched_methods(_out);
1044 }
1045 };
1046
1047 TouchedMethodsDCmd::TouchedMethodsDCmd(outputStream* output, bool heap) :
1048 DCmdWithParser(output, heap)
1049 {}
1050
1051 void TouchedMethodsDCmd::execute(DCmdSource source, TRAPS) {
|
79 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<VersionDCmd>(full_export, true, false));
80 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CommandLineDCmd>(full_export, true, false));
81 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<PrintSystemPropertiesDCmd>(full_export, true, false));
82 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<PrintVMFlagsDCmd>(full_export, true, false));
83 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<SetVMFlagDCmd>(full_export, true, false));
84 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<VMDynamicLibrariesDCmd>(full_export, true, false));
85 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<VMUptimeDCmd>(full_export, true, false));
86 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<VMInfoDCmd>(full_export, true, false));
87 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<SystemGCDCmd>(full_export, true, false));
88 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<RunFinalizationDCmd>(full_export, true, false));
89 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<HeapInfoDCmd>(full_export, true, false));
90 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<FinalizerInfoDCmd>(full_export, true, false));
91 #if INCLUDE_SERVICES
92 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<HeapDumpDCmd>(DCmd_Source_Internal | DCmd_Source_AttachAPI, true, false));
93 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<ClassHistogramDCmd>(full_export, true, false));
94 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<SystemDictionaryDCmd>(full_export, true, false));
95 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<ClassHierarchyDCmd>(full_export, true, false));
96 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<SymboltableDCmd>(full_export, true, false));
97 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<StringtableDCmd>(full_export, true, false));
98 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<metaspace::MetaspaceDCmd>(full_export, true, false));
99 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<PrintClassLayoutDCmd>(full_export, true, false));
100 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<EventLogDCmd>(full_export, true, false));
101 #if INCLUDE_JVMTI // Both JVMTI and SERVICES have to be enabled to have this dcmd
102 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JVMTIAgentLoadDCmd>(full_export, true, false));
103 #endif // INCLUDE_JVMTI
104 #endif // INCLUDE_SERVICES
105 #if INCLUDE_JVMTI
106 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JVMTIDataDumpDCmd>(full_export, true, false));
107 #endif // INCLUDE_JVMTI
108 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<ThreadDumpDCmd>(full_export, true, false));
109 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<ClassLoaderStatsDCmd>(full_export, true, false));
110 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<ClassLoaderHierarchyDCmd>(full_export, true, false));
111 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CompileQueueDCmd>(full_export, true, false));
112 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CodeListDCmd>(full_export, true, false));
113 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CodeCacheDCmd>(full_export, true, false));
114 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<TouchedMethodsDCmd>(full_export, true, false));
115 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CodeHeapAnalyticsDCmd>(full_export, true, false));
116
117 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CompilerDirectivesPrintDCmd>(full_export, true, false));
118 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CompilerDirectivesAddDCmd>(full_export, true, false));
119 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CompilerDirectivesRemoveDCmd>(full_export, true, false));
120 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CompilerDirectivesClearDCmd>(full_export, true, false));
121
122 // Enhanced JMX Agent Support
123 // These commands won't be exported via the DiagnosticCommandMBean until an
124 // appropriate permission is created for them
125 uint32_t jmx_agent_export_flags = DCmd_Source_Internal | DCmd_Source_AttachAPI;
126 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JMXStartRemoteDCmd>(jmx_agent_export_flags, true,false));
127 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JMXStartLocalDCmd>(jmx_agent_export_flags, true,false));
128 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JMXStopRemoteDCmd>(jmx_agent_export_flags, true,false));
129 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JMXStatusDCmd>(jmx_agent_export_flags, true,false));
130 // Debug on cmd (only makes sense with JVMTI since the agentlib needs it).
131 #if INCLUDE_JVMTI
132 DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<DebugOnCmdStartDCmd>(full_export, true, true));
133 #endif // INCLUDE_JVMTI
134
135 }
136
137 #ifndef HAVE_EXTRA_DCMD
138 void DCmdRegistrant::register_dcmds_ext(){
139 // Do nothing here
140 }
141 #endif
142
143
144 HelpDCmd::HelpDCmd(outputStream* output, bool heap) : DCmdWithParser(output, heap),
145 _all("-all", "Show help for all commands", "BOOLEAN", false, "false"),
146 _cmd("command name", "The name of the command for which we want help",
147 "STRING", false) {
148 _dcmdparser.add_dcmd_option(&_all);
149 _dcmdparser.add_dcmd_argument(&_cmd);
1012
1013 void ClassHierarchyDCmd::execute(DCmdSource source, TRAPS) {
1014 VM_PrintClassHierarchy printClassHierarchyOp(output(), _print_interfaces.value(),
1015 _print_subclasses.value(), _classname.value());
1016 VMThread::execute(&printClassHierarchyOp);
1017 }
1018
1019 int ClassHierarchyDCmd::num_arguments() {
1020 ResourceMark rm;
1021 ClassHierarchyDCmd* dcmd = new ClassHierarchyDCmd(NULL, false);
1022 if (dcmd != NULL) {
1023 DCmdMark mark(dcmd);
1024 return dcmd->_dcmdparser.num_arguments();
1025 } else {
1026 return 0;
1027 }
1028 }
1029
1030 #endif
1031
1032 PrintClassLayoutDCmd::PrintClassLayoutDCmd(outputStream* output, bool heap) :
1033 DCmdWithParser(output, heap),
1034 _classname("classname", "Name of class whose layout should be printed. ",
1035 "STRING", true) {
1036 _dcmdparser.add_dcmd_argument(&_classname);
1037 }
1038
1039 void PrintClassLayoutDCmd::execute(DCmdSource source, TRAPS) {
1040 VM_PrintClassLayout printClassLayoutOp(output(), _classname.value());
1041 VMThread::execute(&printClassLayoutOp);
1042 }
1043
1044 int PrintClassLayoutDCmd::num_arguments() {
1045 ResourceMark rm;
1046 PrintClassLayoutDCmd* dcmd = new PrintClassLayoutDCmd(NULL, false);
1047 if (dcmd != NULL) {
1048 DCmdMark mark(dcmd);
1049 return dcmd->_dcmdparser.num_arguments();
1050 } else {
1051 return 0;
1052 }
1053 }
1054
1055 class VM_DumpTouchedMethods : public VM_Operation {
1056 private:
1057 outputStream* _out;
1058 public:
1059 VM_DumpTouchedMethods(outputStream* out) {
1060 _out = out;
1061 }
1062
1063 virtual VMOp_Type type() const { return VMOp_DumpTouchedMethods; }
1064
1065 virtual void doit() {
1066 Method::print_touched_methods(_out);
1067 }
1068 };
1069
1070 TouchedMethodsDCmd::TouchedMethodsDCmd(outputStream* output, bool heap) :
1071 DCmdWithParser(output, heap)
1072 {}
1073
1074 void TouchedMethodsDCmd::execute(DCmdSource source, TRAPS) {
|