gpt4 book ai didi

java - 如何测量 Android 中的线程特定时间?

转载 作者:行者123 更新时间:2023-11-30 00:29:07 24 4
gpt4 key购买 nike

在标准 JVM(例如 1.8 版)中,我们可以像这样访问当前线程的时间:

ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();

在 Android(即 Dalvik VM)中获取当前线程时间的等效方法是什么。

最佳答案

CPU 时间方法

SystemClock.currentThreadTimeMillis:

来自implementation您可以看到它正在使用 CLOCK_THREAD_CPUTIME_ID,并将纳秒划分为毫秒。同样有currentThreadTimeMicro .这两个使用 @CriticalNative@FastNative 还要快的注解。这种特殊的优化要求该方法不使用对象,只使用基元,并且是静态的。因此,根本没有使用 JNIEnv。与@FastNative类似,这些注解只是针对平台调用的,不是动态链接的,而是框架事先专门链接的。

android.os.Debug.threadCpuTimeNanos()

Get an indication of thread CPU usage. The value returned indicates the amount of time that the current thread has spent executing code or waiting for certain types of I/O. The time is expressed in nanoseconds, and is only meaningful when compared to the result from an earlier call. Note that nanosecond resolution does not imply nanosecond accuracy.

通过检查 Android 运行时 (ART),这会调用 ThreadCpuNanoTime方法,它使用 CLOCK_THREAD_CPUTIME_ID。此外,它被标记为 fast Native method并在 Java 中注释为 @FastNative。这允许通过加速 JNI 转换来优化它。我猜想这种优化与 @CriticalNative 类似,利用了它们不需要完全构造/破坏 JNI 环境这一事实,因为这里没有真正的依赖关系。它本质上只是一个 syscall .

或者,可以实现一个 JNI 方法来做同样的事情,但不会有更快的 JNI 处理。

挂钟接近

System.nanoTime()currentTimeMillis() 都没有绑定(bind)到线程,而是使用CLOCK_MONOTONIC

关于java - 如何测量 Android 中的线程特定时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44789531/

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