我发现这篇很好的文章解释了如何查询虚拟机http://recursor.blogspot.com/2006/10/memory-notifications-in-java.html
的当前内存我的问题是,是否可以轻松地从远程VM获取MemoryMXBean类的实例(以及我该怎么做),还是必须手动查询MBean?
答案 0 :(得分:1)
您可以远程查询JMX bean。请参阅JMX教程中的JMX Connectors部分。
直截了当的方法可能是使用JConsole来确定您要查询的内容(在本例中为您的MemoryMXBean),然后围绕该代码进行编码。
答案 1 :(得分:1)
如this page所述,您可以使用MBeanServerConnection
远程访问它:
MBeanServerConnection mbs;
// Connect to a running JVM (or itself) and get MBeanServerConnection
// that has the JVM MXBeans registered in it
...
try {
// Assuming the RuntimeMXBean has been registered in mbs
ObjectName oname = new ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME);
// Get standard attribute "VmVendor"
String vendor = (String) mbs.getAttribute(oname, "VmVendor");
} catch (....) {
// Catch the exceptions thrown by ObjectName constructor
// and MBeanServer.getAttribute method
...
}
但是,据我所知,您将无法使用Java界面,您需要查询所需的属性
CompositeDataSupport mem = (CompositeDataSupport)serv.getAttribute(memory, "NonHeapMemoryUsage") ;
和
mem.get("committed")
这是非常糟糕的('stringly-typed'界面,正如他们在另一个问题中所说的那样)。
正如Brian Agnew所说,JConsole视图非常有用,可以找出所需信息的存储位置。