我们如何为非本地线程定义“线程 CPU 时间”?更具体地说,它是如何在 JVM 上定义的(大概是从 JVM 抽象出 CPU,因此定义可能与较低级别的进程略有不同)......
我正在从这个测量的 JVM 实现工作:http: //docs.oracle.com/javase/1.5.0/docs/api/java/lang/management/ThreadMXBean.html这似乎没有直接定义什么“线程CPU时间”是直接衡量的。
我们如何为非本地线程定义“线程 CPU 时间”?更具体地说,它是如何在 JVM 上定义的(大概是从 JVM 抽象出 CPU,因此定义可能与较低级别的进程略有不同)......
我正在从这个测量的 JVM 实现工作:http: //docs.oracle.com/javase/1.5.0/docs/api/java/lang/management/ThreadMXBean.html这似乎没有直接定义什么“线程CPU时间”是直接衡量的。
线程 CPU 时间已经是一个非常通用的术语。基本上它代表 CPU 在给定线程上花费的时间。
它的定义没有任何不同,因为它在 JVM 上,唯一需要考虑的重要部分是 JVM 是否真的允许您测量它。有些会,有些不会。
不一定要打破抽象。POSIX 确实指定了一种测量每个线程的 cpu 时间的方法。然后是 Windows :)
搜索热点源,我看到:
热点/src/share/vm/runtime/os.hpp
// JVMTI & JVM monitoring and management support
// The thread_cpu_time() and current_thread_cpu_time() are only
// supported if is_thread_cpu_time_supported() returns true.
// They are not supported on Solaris T1.
在hotspot/src/os/linux/vm/os_linux.cpp中,我确实看到pthread_getcpuclockid和clock_gettime被用于此目的
在hotspot/src/os/windows/vm/os_windows.cpp中,我看到使用了GetThreadTimes。