【发布时间】:2011-12-19 07:27:29
【问题描述】:
我想测试在简单通用的hashmap中添加和获取item的时间:
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 的代码部分之间改变位置,我会得到不同的时间! 如果我将泛型的循环(当然还有时间打印)放在简单的下面,我会得到更好的泛型时间,如果我把简单放在泛型之下,我会得到更好的简单时间!
如果我为此使用不同的方法,也会发生同样的情况。
【问题讨论】:
-
请编辑您的问题,使其更有意义 - 目前很难理解。请阅读tinyurl.com/so-hints
-
问题不清楚。您是说您有两段据称完全不相关的代码,而第二段运行的代码运行得更快(相反,当您切换它们的顺序时)?可能是 JIT 在工作等。也许“热身”这两个部分并在完成后进行计时。
-
但我可以告诉你:泛型对运行时性能的影响为零。它们是纯编译时的东西。
-
泛型对运行时性能的影响为零?谢谢!
标签: java performance execution