Thread.sleep()的CPU消耗

时间:2014-09-09 16:18:21

标签: java multithreading jvisualvm

在Sample Samples选项卡/ CPU中,在CPU Samples子选项卡下,我看到最常用的方法是java.lang.Thread.sleepnative。

我有大约30个具有相对sleep()调用的线程。但这是什么意思呢?

我的平均报告CPU消耗是7%,是Thread.sleep()真的使用了70%的时间吗?

怎么可能,这是“真正的”消费吗?

1 个答案:

答案 0 :(得分:7)

通常,采样器只会检查每个给定时间你的程序正在做什么,并报告你的程序在给定方法中多少次(并通过一个简单的乘法给出一个近似的时间)。

这通常与实际CPU负载无关。

例如,sleep()调用会暂停线程,因此您的代码几乎不会加载CPU,但是,如果我的程序只启动,则会睡眠10分钟并结束,采样它会告诉我Thread.sleep消耗了100%的cpu时间。

这同样适用于IO操作,其中您的线程正在等待数据从某处(可能是远程Internet主机,或者只是您的磁盘)到达,并且没有显着加载CPU,但仍然是采样器将(正确地)告诉你,大部分时间都花在IO方法中,即使CPU本身没有做那么多。