gpt4 book ai didi

java - Java可以缓存一个特定的函数吗?

转载 作者:行者123 更新时间:2023-11-29 05:30:31 26 4
gpt4 key购买 nike

我目前正在研究 Stroop Test对于我大学的一个研究所。

虽然测量用户按下按键所需的时间没有问题,但我很好奇在调用 System.nanoTimes() 时存在什么样的延迟。我写了一个小测试

@Test
public void nanoTest()
{
for(int i = 0; i < 100; i++)
{
long t1 = System.nanoTime();
long t2 = System.nanoTime();
long t3 = System.nanoTime();
System.out.println("took: "+(t3-t1));
}
}

这告诉我:

took: 513
took: 0
took: 513
took: 513
took: 0
took: 0
took: 0
took: 0
took: 0
took: 514
took: 0
... etc.

除了 0、513 或 514 之外没有其他值。如果我将 long t2 = System.nanoTime(); 替换为 long t2 = System.currentTimeMillis(); 它会打印类似

的内容
took: 1540
took: 513
took: 513
took: 0
took: 0
took: 514
took: 514
took: 513
took: 513
took: 513
took: 514
... etc.

我假设我们第一次调用 System.currentTimeMillis() 函数没有被缓存(我不确定 JVM 是如何处理缓存的...)因此延迟比那时大得多通常的 0.5ms。我可以假设发生这种情况是因为该函数被缓存并经常被调用。虽然我可以接受 0 到 0.5 毫秒之间的延迟来调用 nanoTimes(),但我不能接受 1.5 毫秒甚至更长的时间来调用时间函数。

我可以告诉 JVM 甚至我的 cpu 缓存特定的时间函数吗?我可以告诉 JVM 缓存整个程序吗?如何在测量时间时实现最小延迟?

我知道这些数字可能因个人电脑而异,如果我在后台运行更多程序,这些数字甚至会有所不同,因此我尽量让时间测量的延迟尽可能小。

最佳答案

System.nanoTime 不保证纳秒时间的准确性: http://docs.oracle.com/javase/6/docs/api/java/lang/System.html#nanoTime%28%29
此方法提供纳秒级精度,但不一定是纳秒级精度。不保证值更改的频率。

波动可能只是来自时钟粒度、线程调度等因素。很难对如此小的间隔进行基准测试,而且通常不值得付出努力。

关于java - Java可以缓存一个特定的函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21234053/

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