我尝试使用gtime命令(我相信这是Mac OSx等效于Unix time命令)来获取Java程序的执行时间。但结果似乎令人困惑:
这是我得到的:
> gtime java主
7.36用户0.29系统0:02.11已运行362%CPU(0avgtext + 0avgdata 306264maxresident)k 0输入+0输出(273major + 114934minor)页面故障0交换
如您所见,CPU使用率为362%,用户时间(7.36s)>>实时(2.11s)。谁能解释为什么会这样?我正在使用Macbook Pro,它具有2.60GHz(4核)处理器的Intel®Core™i7-6700HQ CPU。
附带说明一下,使用Java运行“ hello world”程序还会返回CPU使用率> 100%。
> gtime java HelloWorld
你好,世界!0.14用户0.04系统0:00.14经过124%CPU(0avgtext + 0avgdata 33668maxresident)k 0输入+ 0输出(0major + 10288minor)页面故障0交换
即使您运行一个简单的main()
程序,JVM也会启动多个后台线程。这些线程正在执行JIT编译,RMI处理,对象完成或其他系统任务。您可以通过手动调试或进行线程转储来查看这些线程。其次,当今使用的大多数垃圾收集器实现都是并行或多线程的(或两者都是),它们将尝试使用所有可用的CPU内核来缩短GC暂停。
上面所有这些都会导致JVM使用多个CPU内核。大多数工具会将其报告为CPU利用率超过100%。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句