--- old/src/share/vm/services/diagnosticCommand.cpp 2015-03-26 15:13:40.154097119 -0700 +++ new/src/share/vm/services/diagnosticCommand.cpp 2015-03-26 15:13:40.009089887 -0700 @@ -26,6 +26,7 @@ #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" @@ -68,6 +69,7 @@ DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl(full_export, true, false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl(full_export, true, false)); DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl(full_export, true, false)); + DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl(full_export, true, false)); // Enhanced JMX Agent Support // These commands won't be exported via the DiagnosticCommandMBean until an @@ -729,3 +731,35 @@ } #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; +}