CPU使用率和Object.wait

时间:2011-12-28 14:05:37

标签: java performance profiling cpu wait

我使用JProfiler分析我的应用程序,因此,在“CPU视图”部分显示超过40%的CPU时间花费在Object.wait()上。但据我所知Object.wait() CPU没有给等待线程。

有人可以帮助了解发生了什么以及探查器为什么会在Object.wait()花费这么多CPU?

3 个答案:

答案 0 :(得分:6)

wait()中,探查器不知道CPU处于空闲状态。探查器知道的所有内容都是wait()已输入,几毫秒后它返回。因此,如果这些毫秒往往占用执行时间的40%,那么就有了它。

答案 1 :(得分:2)

40%的是什么?假设您分析以下代码:

for (i = 0; i < 1000; i++){
  sleep(1);
}

如果你只看CPU时间(不是挂钟时间),几乎全部都在sleep

为什么呢?因为它使用的CPU时间非常短,但是 使用的CPU时间,所有这些都用于进入和离开sleep

当然,如果你看一下挂钟时间,那么更多的会是sleep

同样适用于任何阻止调用,例如wait

答案 2 :(得分:0)

JProfiler区分各种线程状态。 wait方法的显示时间取决于CPU视图右上角的线程状态选择器。有关详细信息,请参阅http://blog.ej-technologies.com/2009/07/thread-states-in-cpu-profiling-views.html