我一直在使用Java上的HashMap进行一些性能检查。我应该说,结果令人惊讶。我会先显示代码。
public class HashMapCheck {
int m_size =10;
String Keys[], Values[] ;
void initKeyValues(int size){
m_size=size;
Keys = new String[m_size];
Values = new String[m_size];
for(int i=0;i<m_size;i++)
{
Keys[i]="key"+i;
Values[i] ="value"+ i;
}
}
public void withOutInitialCapacity(){
long start= System.nanoTime();
HashMap hm = new HashMap();
long hmEnd=System.nanoTime();
long hmPutStart=hmEnd;
for(int i=0;i<m_size;i++)
{
hm.put(Keys[i], Values[i]);
}
long hmPutEnd=System.nanoTime();
long hmGetStart=hmPutEnd;
hm.get("key5");
hm.get("key155");
hm.get("key195");
//hm.get("key395");
long hmGetEnd =System.nanoTime();
long end= hmGetEnd;
System.out.println("size="+m_size+",total="+(end-start)+",put="+
(hmPutEnd- hmPutStart)+",get="+(hmGetEnd-hmGetStart));
}
}
MAIN CLASS
public class Driver {
public static void main(String[] args) {
HashMapCheck hmc = new HashMapCheck();
hmc.initKeyValues(100);
hmc.withOutInitialCapacity();
HashMapCheck hmc2 = new HashMapCheck();
hmc2.initKeyValues(100);
hmc2.withOutInitialCapacity();
HashMapCheck hmc3 = new HashMapCheck();
hmc3.initKeyValues(100);
hmc3.withOutInitialCapacity();
HashMapCheck hmc4 = new HashMapCheck();
hmc4.initKeyValues(100);
hmc4.withOutInitialCapacity();
HashMapCheck hmc5 = new HashMapCheck();
hmc5.initKeyValues(100);
hmc5.withOutInitialCapacity();
HashMapCheck hmc6 = new HashMapCheck();
hmc6.initKeyValues(100);
hmc6.withOutInitialCapacity();
}
}
好的我正在测量在散列图中放入100个值并从中获取3个值所花费的时间。现在问题就出现了。
1)我首先尝试使用上面的函数,其中1个值(key5)在hashMap中,2个值(key155,key195)在hashmap中不存在。以下是结果 size = 100,total = 80446,put = 69190,get = 6290 size = 100,total = 69852,put = 63893,get = 2317 size = 100,total = 69852,put = 62900,get = 3972 size = 100,total = 68859,放= 64224,GET = 1656 size = 100,total = 69190,put = 63562,get = 1655 size = 100,total = 67866,put = 63562,get = 1324 正如你所看到的那样get()时间在第3和第一时间高于所有其他时间,总数也高于第一
2)这次我尝试对withoutInitialCapacity()做了一些小改动。这次我使用hm.get(&#34; key5&#34;); hm.get(&#34; key45&#34); hm.get(&#34; key195&#34); 因此,hashMap中有两个值,一个值不是。结果是
size=100,total=80777,put=68859,get=6952 size=100,total=73825,put=63893,get=5959
size=100,total=82763,put=78459,get=1324 size=100,total=70845,put=66210,get=1656
size=100,total=70845,put=64886,get=1655 size=100,total=69190,put=64886,get=1324
1st and second get has a high value.
为什么会这样?是JIT吗?