src/share/vm/services/diagnosticCommand.cpp

Print this page

        

*** 24,33 **** --- 24,34 ---- #include "precompiled.hpp" #include "classfile/classLoaderStats.hpp" #include "classfile/compactHashtable.hpp" #include "gc_implementation/shared/vmGCOperations.hpp" + #include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "runtime/javaCalls.hpp" #include "runtime/os.hpp" #include "services/diagnosticArgument.hpp" #include "services/diagnosticCommand.hpp"
*** 66,75 **** --- 67,77 ---- DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<RotateGCLogDCmd>(full_export, true, false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<ClassLoaderStatsDCmd>(full_export, true, false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CompileQueueDCmd>(full_export, true, false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CodeListDCmd>(full_export, true, false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CodeCacheDCmd>(full_export, true, false)); + DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<MethodUsageDCmd>(full_export, true, false)); // Enhanced JMX Agent Support // These commands won't be exported via the DiagnosticCommandMBean until an // appropriate permission is created for them uint32_t jmx_agent_export_flags = DCmd_Source_Internal | DCmd_Source_AttachAPI;
*** 727,731 **** --- 729,765 ---- return 0; } } #endif + + class VM_DumpMethodUsage : public VM_Operation { + private: + outputStream* _out; + public: + VM_DumpMethodUsage(outputStream* out) { + _out = out; + } + + virtual VMOp_Type type() const { return VMOp_DumpMethodUsage; } + + virtual void doit() { + Method::print_usage(_out); + } + }; + + MethodUsageDCmd::MethodUsageDCmd(outputStream* output, bool heap) : + DCmdWithParser(output, heap) + {} + + void MethodUsageDCmd::execute(DCmdSource source, TRAPS) { + if (!UnlockDiagnosticVMOptions) { + output()->print_cr("VM.method_usage command requires -XX:+UnlockDiagnosticVMOptions"); + return; + } + VM_DumpMethodUsage dumper(output()); + VMThread::execute(&dumper); + } + + int MethodUsageDCmd::num_arguments() { + return 0; + }