ThreadMXBean有两种方法用于检索线程时间使用情况:
两者有什么区别?
更新2:如果我能够链接到javadocs,请不要引用它们 - 我已经阅读过它们了.
更新:这里有一些代码,我试图用它来了解这些时间的含义,但收效甚微:
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
threadMXBean.setThreadContentionMonitoringEnabled(true);
long mainThreadId = getMainThreadId(threadMXBean);
logTimes("Start", threadMXBean, mainThreadId);
URL url = new URL("https://hudson.dev.java.net");
URLConnection connection = url.openConnection();
connection.getContent();
logTimes("After loading", threadMXBean, mainThreadId);
Run Code Online (Sandbox Code Playgroud)
输出是:
Start Tue Jun 16 16:13:40 EEST 2009 Cpu time : 80, user time: 60, waited: 0, blocked: 0
After loading Tue Jun 16 16:13:43 EEST 2009 Cpu time : 1,020, user time: 960, waited: 0, blocked: 0
Run Code Online (Sandbox Code Playgroud)
因此,CPU和用户时间之间的差异从20毫秒增加到60毫秒.是因为使用HttpUrlConnection确实包含一些网络I/O?
正如您自己链接的API文档已经指出的那样
getThreadCpuTime
如果实现区分用户模式时间和系统模式时间,则返回的CPU时间是线程在用户模式或系统模式下执行的时间量.
如果JVM的实现区分用户模式和内核模式时间,则两个函数的结果可能存在差异.
此外,该值仅精确到纳秒,并且如果偏移> 2 ^ 63,则该值具有溢出问题.JVM还必须支持测量当前线程的CPU时间,并且必须启用它.
在Win32上,返回值应与从GetThreadTimes函数获得的值相同
getThreadUserTime()- > lpUserTime * 100//或类似的东西
getThreadCpuTime()- > (lpKernelTime + lpUserTime) * 100//或类似的东西
并且更清楚地提到用户模式与内核模式
| 归档时间: |
|
| 查看次数: |
7682 次 |
| 最近记录: |