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;
+ }