我使用JProfiler分析我的应用程序,因此,在“CPU视图”部分显示超过40%的CPU时间花费在Object.wait()
上。但据我所知Object.wait()
CPU没有给等待线程。
有人可以帮助了解发生了什么以及探查器为什么会在Object.wait()
花费这么多CPU?
答案 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。