簡體   English   中英

java程序獲取系統的cpu和內存信息

[英]java program to get the cpu and memory info of the system

我正在使用此代碼來獲取一些值

OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean();
for (Method method : operatingSystemMXBean.getClass().getDeclaredMethods()) {
    method.setAccessible(true);
    if (method.getName().startsWith("get") 
        && Modifier.isPublic(method.getModifiers())) {
        Object value;
        try {
            value = method.invoke(operatingSystemMXBean);
        } catch (Exception e) {
            value = e;
        } // try
        System.out.println("\n \t ");
        System.out.println( method.getName() +     " = "    + value);
    }
}

輸出:

getFreeSwapSpaceSize = 413728768

getProcessCpuLoad = -1.0

getProcessCpuTime = 1029606600

getSystemCpuLoad = 0.31576507895572437

getCommittedVirtualMemorySize = 48242688

getFreePhysicalMemorySize = 207011840

getTotalPhysicalMemorySize = 2147483647

getTotalSwapSpaceSize = 4294967295

但是我想分別獲取每個數據,上述輸出值存儲在value並將其存儲在該單個對象中。 我想在秋千中使用它,以便在每個按鈕中單擊時,我分別獲得上述值。 到目前為止,單擊一個按鈕,我將上述所有信息匯總在一起,但我希望將其單獨存儲,例如:分別分配總物理內存,然后分配系統CPU負載等。

如何修改上述程序,以便可以分別存儲每個值?

對於要放入UI中的每個按鈕,將它們創建為

   Button b1 = new Button();
   b1.setActionCommand("getTotalSwapSpace");
   b1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean();
            try {
                Method method = operatingSystemMXBean.getClass().getDeclaredMethod("getTotalSwapSpaceSize", null);
                method.setAccessible(true);
                Object value = method.invoke(operatingSystemMXBean, new Object[]{});
                System.out.println(" Value = " + value);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    });

顯示返回的值。 已更改原始代碼,請嘗試此操作。

對於CPU使用OperatingSystemMXBean類

OperatingSystemMXBean operatingSystemMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
int availableProcessors = operatingSystemMXBean.getAvailableProcessors();
long prevUpTime = runtimeMXBean.getUptime();
long prevProcessCpuTime = operatingSystemMXBean.getProcessCpuTime();
double cpuUsage;
try
{
    Thread.sleep(500);
}
catch (Exception ignored) { }

operatingSystemMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
long upTime = runtimeMXBean.getUptime();
long processCpuTime = operatingSystemMXBean.getProcessCpuTime();
long elapsedCpu = processCpuTime - prevProcessCpuTime;
long elapsedTime = upTime - prevUpTime;

cpuUsage = Math.min(99F, elapsedCpu / (elapsedTime * 10000F * availableProcessors));
System.out.println("Java CPU: " + cpuUsage);

對於內存,請使用java.lang.management中的Runtime類

long total = Runtime.getRuntime().totalMemory();
long used = Runtime.getRuntime().totalMemory()
        - Runtime.getRuntime().freeMemory();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM