You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java getCpuLoad()方法使用异常及JDK实现相关疑问

关于OperatingSystemMXBean.getCpuLoad()始终返回0的问题

我尝试用以下Java代码获取当前CPU负载:

while (true) {
     OperatingSystemMXBean os = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
     System.out.println("CPU Load: " + os.getCpuLoad() * 100 + "%");
}

此时我正在运行stress --cpu 4,实际CPU负载约为20%,但代码输出始终为0%。查阅JDK文档,该方法说明是“返回操作系统环境的‘近期CPU使用率’”。

在while循环内添加Thread.sleep(1000)后,输出结果符合预期。这说明调用getCpuLoad()之间需要一定时间间隔,因为它需要在时间段内收集系统统计数据。

我还做了无循环的两次打印测试:

Thread.sleep(1000);
OperatingSystemMXBean os = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
Thread.sleep(1000);
System.out.println(os.getCpuLoad() * 100 + "%"); // 始终为0%
Thread.sleep(1000);
System.out.println(os.getCpuLoad() * 100 + "%"); // 约为20%

结果显示首次调用getCpuLoad()始终返回0,这让我困惑:这是否是JDK实现的陷阱?为何JDK文档未添加相关使用警告?

环境配置:

  • OS: 5.15.91-1-MANJARO
  • JDK: openjdk 17.0.6 2023-01-17 LTS

内容的提问来源于stack exchange,提问作者chenzhongpu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 13:40:34