gpt4 book ai didi

java - 方法执行时间错误

转载 作者:行者123 更新时间:2023-12-02 08:03:22 26 4
gpt4 key购买 nike

我想测试在简单通用的 HashMap 中添加和获取项目的时间:

public void TestHashGeneric(){


Map hashsimple = new HashMap();

long startTime = System.currentTimeMillis();



for (int i = 0; i < 100000; i++) {
hashsimple.put("key"+i, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" );
}

for (int i = 0; i < 100000; i++) {
String ret =(String)hashsimple.get("key"+i);
}
long endTime =System.currentTimeMillis();

System.out.println("Hash Time " + (endTime - startTime) + " millisec");

Map<String,String> hm = new HashMap<String,String>();

startTime = System.currentTimeMillis();



for (int i = 0; i < 100000; i++) {
hm.put("key"+i, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" );
}

for (int i = 0; i < 100000; i++) {
String ret = hm.get("key"+i);
}
endTime = System.currentTimeMillis();

System.out.println("Hash generic Time " + (endTime - startTime) + " millisec");

}

问题是,如果我改变 hashmap 代码部分之间的位置,我会得到不同的时间!如果我把泛型的循环(当然还有时间打印)放在简单的下面,我会得到更好的泛型时间,如果我把简单的放在泛型下面,我会得到更好的简单时间!

如果我为此使用不同的方法,也会发生同样的情况。

最佳答案

JIT将在程序运行时对其进行编译和优化,因此第二次运行总是会更快。

您应该进行以下修改:

  1. 首先不定时运行这两个测试,然后定时重新运行它们,这样您就不会受到 JIT 的影响。
  2. 您应该使用System.nanoTime()因为这对于计时来说更准确(你永远不应该得到 0 的差异)。
  3. 您还应该测试一些空方法,因为您还在每个循环中对字符串连接操作进行计时。

另请注意,在 Java 中泛型类型被删除,因此根本不应该有运行时差异。

关于java - 方法执行时间错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8558294/

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