Fed*_*ssi 0 java multithreading jvisualvm
在Sample Samples选项卡中查看,在CPU Samples子选项卡下,我看到最常用的方法是java.lang.Thread.sleepnative.
我有大约30个线程与相对sleep()调用.但这是什么意思呢?
我平均报告的CPU消耗是7%,是Thread.sleep()真的使用了70%的时间吗?
怎么可能,这是一种"真正的"消费吗?
通常,采样器只会检查每个给定时间您的程序正在做什么,并报告您的程序在给定方法中多少次(并通过简单的乘法给出一个近似的时间).
这通常与实际CPU负载无关.
例如,一个sleep()调用暂停线程,因此你的代码几乎没有加载CPU,但是,如果我有一个只启动的程序,睡眠10分钟并结束,那么它的采样将告诉你我认为Thread.sleep消耗了100%的CPU时间.
这同样适用于IO操作,其中您的线程正在等待数据从某处(可能是远程Internet主机,或仅仅是您的磁盘)到达,并且没有显着加载CPU,但仍然是采样器(正确)告诉你,大部分时间都花在IO方法中,即使CPU本身没有做那么多.
| 归档时间: |
|
| 查看次数: |
1368 次 |
| 最近记录: |