2013-12-16 34 views
2
long stime=System.currentTimeMillis(); 
for(int i=0;i<500000;i++) 
{ 
    String s1="Hello"; 
    String s2="Hello"; 
} 
long etime=System.currentTimeMillis(); 
System.out.println("Time diff"+(etime-stime)); 
long stime1=System.currentTimeMillis(); 
for(int i=0;i<500000;i++) 
{ 
    String s3=new String("Hello"); 
    String s4=new String("Hello"); 
} 
long etime1=System.currentTimeMillis(); 
System.out.println("Time diff"+(etime1-stime1)); 

其實我在兩種情況下都得到了0個答案。爲什麼是零在這兩個情況下在java中以下是什麼答案?

+4

什麼是stime和etime的數據時間,長? – vikingsteve

+3

「Sytsem」??? ???你的代碼不會編譯... !!! – TheLostMind

+0

@LostMind對不起系統 – Ritesh

回答

3

爲什麼零是在這兩個情況,因此也不算稀奇它正在0毫秒

您的代碼不會做任何有用的。它可能需要900,000納秒或約3,000,000個時鐘週期,但仍然在毫秒級。

而不是使用System.currentTimeMillis()的,你可以使用System.nanoTime()

這不會告訴你的代碼是如何進行運行,而是它會告訴你需要多長時間的JVM檢測代碼沒有任何有用的東西,並優化它。

總之,毫秒是計算機的永恆。一個10核心的CPU可以在3.5 GHz的每個時鐘週期內執行多達3條指令,可以在毫秒內完成100,000,000條指令(如果只有1%的指令,你可能會很幸運)。另一個要記住的關鍵是JVM優化代碼動態,這意味着它啓動緩慢,並獲得更快,如果你沒有做任何有用的事情,你很可能得到同樣有用的時間;)

12

執行time.Replace System.currentTimeMillis();使用System.nanoTime()System.nanoTime();

System.nanoTime()給你一個納秒級分辨率的計時器,它至少是微第二精確在大多數系統。這可以讓你看到小於一毫秒的較小時間間隔。

相關問題