您好我需要获取有关操作系统物理内存和CPU使用情况的详细信息以及其他详细信息。我无法为已有的API支付任何金额。我可以使用任何免费的API,或者我可以编写自己的API。
我需要下图中的所有细节。
在上图中,我必须得到以下值
public class MBeanServerDemo {
public MBeanServerDemo() {
super();
}
public static void main(String... a) throws Exception {
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
Object attribute =
mBeanServer.getAttribute(new ObjectName("java.lang", "type", "OperatingSystem"), "TotalPhysicalMemorySize");
long l = Long.parseLong(attribute.toString());
System.out.println("Total memory: " + (l / (1024*1024)));
}
}
以下是上述程序的输出
Total memory: 3293
请帮帮我。我如何实现这一目标。
编辑:我在google上搜索了很多解决方案,我在stackoverflow.com上发现了很多帖子。但在所有这些帖子中,人们只讨论了内存细节。我需要关于Kernal(分页和非分页)等的所有细节。请参阅这篇文章......
非常感谢。
答案 0 :(得分:2)
请看下面的API:
SIGAR API - 系统信息收集器和报告器 https://support.hyperic.com/display/SIGAR/Home
一些示例用法:http://www.programcreek.com/java-api-examples/index.php?api=org.hyperic.sigar.Sigar
答案 1 :(得分:0)
您可以使用JNA,它提供对平台特定api的大量访问,例如win32.dll
答案 2 :(得分:0)
考虑在Windows上使用jInterop执行此任务。
以MB为单位获取RAM的总量:
Ignore optional compile problems
获取CPU的总数:
public int getRAMSizeMB() throws JIException
{
String query = "Select * From Win32_ComputerSystem";
long size = 0;
Object[] params = new Object[]
{
new JIString(query),
JIVariant.OPTIONAL_PARAM()
};
JIVariant[] res = super.callMethodA("ExecQuery", params);
JIVariant[][] resSet = Utils.enumToJIVariantArray(res);
for (JIVariant[] resSet1 : resSet)
{
IJIDispatch ramVal = (IJIDispatch) JIObjectFactory.narrowObject(resSet1[0].getObjectAsComObject()
.queryInterface(IJIDispatch.IID));
size = ramVal.get("TotalPhysicalMemory").getObjectAsLong();
break;
}
return Math.round((size / 1024) / 1024);
使用这些功能作为模板,您可以通过MSDN网站查找其他属性/功能以查询其他值。