CPU使用率和Object.wait

Far*_*arz 10 java cpu performance profiling wait

我正在使用JProfiler来分析我的应用程序,因此,在"CPU视图"部分中,它表明花费了超过40%的CPU时间Object.wait().但据我所知,在Object.wait()CPU上没有给予等待线程.

有人可以帮助了解发生了什么以及为什么分析器显示这么多的CPU花费了Object.wait()吗?

Mik*_*kis 6

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


Mik*_*vey 5

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

for (i = 0; i < 1000; i++){
  sleep(1);
}
Run Code Online (Sandbox Code Playgroud)

如果你只看 CPU 时间(不是挂钟时间),几乎所有的时间都在sleep.

为什么?因为它的使用在所有的很少的CPU时间,但是CPU时间它使用,nealy这一切都花在进出sleep

当然,如果您确实查看挂钟时间,则会发现更多时间sleep

任何阻塞调用也是如此,例如wait.