打印出来的结果是什么意思。 System.nanoTime() 在 Java

What does the printed out result mean. System.nanoTime() in Java

我不明白打印出 timeStarted,然后打印出 getTime() 得到了什么。我打印出来的是什么?打印出来的值是什么意思?

我刚刚开始学习 java 并且正在尝试了解如何使用帧速率。

Time.java

public class Time {
    public static double timeStarted = System.nanoTime();
    public static double getTime() { return (System.nanoTime() - timeStarted) * 10E-9; }
}

Main.java

public class Main {
    public static void main(String[] args) {
        Time time = new Time();
        System.out.println(time.timeStarted);
        System.out.println(time.getTime());
    }
}

控制台:

4.24512563119081E14
0.01404352

看看 java-文档:https://docs.oracle.com/javase/7/docs/api/java/lang/System.html#nanoTime()

System.nanoTime() returns 最精确的可用系统计时器的当前值(以纳秒为单位)。值 returned 表示自某个固定但任意时间以来经过的纳秒数。

System.nanoTime() 与日期和时间无关。 System.nanoTime() 是经过纳秒的持续计数,仅此而已。

System.nanoTime() 的 return 值与 10E-9 相乘将得出当前计数(以秒为单位)乘以 10。(要正确转换为秒,您必须乘以 1e-9。我猜这是初衷?)

由于您是从起始计数中减去当前计数,因此 getTime() 的 return 值将表示自 Time-class 已加载,以秒为单位,乘以 10。

如果您查看方法 System.nanoTime,它会以纳秒为单位为您提供当前时间。此外,由于字段 timeStartedstatic,它是在 class Time 加载到 JVM 时分配的,因此该字段节省了 class 加载的时间.方法 getTime 只是计算与当前时间 timeStarted 的差异,并将其乘以 10E-9 将其从纳秒转换为秒,此值表示自 class 已加载。

来自System docs

nanoTime()
Returns the current value of the running Java Virtual Machine's high-resolution time source, in nanoseconds.

你的第一个 println 给你时间,在 纳秒 内,变量 timeStarted 被赋值(在本例中是一个非常大的数字)。

你的第二个 println 给你时间,以 为单位,从你的代码开始到 getTime() 的调用。第二个值以秒为单位,因为它乘以 10E-9,从纳秒到秒的转换因子。

如果 'time' 在计算机系统中通常由单个数字表示。该数字计算自某个初始时间(即数字为 0 的点)以来发生的概念 'ticks' 的数量。在这种情况下,滴答声是 1 纳秒——我并不是说时钟实际上以该速率滴答作响,表示时间的数字可以(比如说)每 100 纳秒递增 100。

因此,如果你有两次这种类型,它们之间的刻度数可以通过简单的减法来确定。

为事件计时,获取事件前后的当前时间,并计算差值。不需要知道初始时间 'means' 就可以使用这样的时间。你只是把时间当作一个数字。