gpt4 book ai didi

java - Java中线程用户时间和线程CPU时间的区别

转载 作者:行者123 更新时间:2023-12-02 03:45:07 24 4
gpt4 key购买 nike

ThreadMXBean 有两种检索线程时间使用情况的方法:

两者有什么区别?

<小时/>

更新 2:如果我能够链接到 javadoc,请不要引用它们 - 我已经阅读过它们。

更新:这里有一些代码,我试图用它们来了解这些时间的含义,但收效甚微:

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);

输出是:

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

因此 cpu 和用户时间之间的差异从 20 毫秒增加到 60 毫秒。这是因为使用 HttpUrlConnection 确实包含一些网络 I/O 吗?

最佳答案

正如您链接到自己的 API 文档已经指出的那样

获取ThreadCpuTime

If the implementation distinguishes between user mode time and system mode time, the returned CPU time is the amount of time that the thread has executed in user mode or system mode.

如果 JVM 的实现区分用户模式和内核模式时间,则两个函数的结果可能会有所不同。

此外,该值仅精确到纳秒,并且如果偏移量> 2^63,则该值存在溢出问题。 JVM 还必须支持测量当前线程的 CPU 时间并且必须启用它。

在 Win32 上,返回值应该与从 GetThreadTimes Function 获得的值相同。

getThreadUserTime() -> lpUserTime * 100//或者类似的东西

getThreadCpuTime() -> (lpKernelTime + lpUserTime) * 100//或者类似的东西

以及对 User Mode vs Kernel Mode 的更清晰引用

关于java - Java中线程用户时间和线程CPU时间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1001248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com