影響

2010-02-13 88 views
9

是否instanceof關鍵字熊與它在Android平臺上相對較重的影響,(多speciffically運行在Dalvik VM的手機?影響

+0

爲什麼你會對Android產生較大的影響而不是Java? – 2010-02-13 23:14:12

+4

安東尼,因爲它是一個完全不同的虛擬機,基於寄存器而不是基於堆棧? – 2010-02-13 23:20:02

+0

爲什麼instanceof會創建垃圾? instanceof測試對象是否是某種類型的實例,它不涉及方法調用或對象創建。你爲什麼要問一個毫無意義的問題,加入毫無意義的無關VM概念? – 2010-02-21 08:47:29

回答

3

我不認爲instanceof熊在Dalvik虛擬機更重的影響相對於JVM。

如果您有任何疑問,你可以看到自己,當你運行了一個名爲分配跟蹤工具,標配作爲DDMS工具應用程序。

+1

這有助於感謝。 – Michiel 2010-02-14 01:22:29

1

我發現t帽子instanceof大多更快(大約60-85%的時間)。但是,當手機顯示背景活動(例如GC,觸摸,按鈕,晃動等)時,這個百分比會下降,但instanceof在50%以上的時間內保持更快。當循環次數非常大時(即> 1000000),instanceof幾乎總是更快。 呈現兩個while循環的順序(即首先是instanceof循環,然後是字段檢查循環)會影響結果,但instanceof仍然是最快的。

 AbstractParticle circleParticle = new CircleParticle(); 
     int cycles = 100000 

     long now1 = System.currentTimeMillis(); 
     int i = 0; 
     while(i<cycles) { 
      if(circleParticle instanceof CircleParticle) { 
       i++; 
      } 
     } 
     long timetaken1 = (System.currentTimeMillis()-now1); 

     long now2 = System.currentTimeMillis(); 
     int j = 0; 
     while(j<cycles) { 
      if(circleParticle.type == AbstractParticle.TYPE_CIRCLE) { 
       j++; 
      } 
     } 
     long timetaken2 = (System.currentTimeMillis()-now2); 

     if(timetaken1 < timetaken2) { 
      type1won++; 
     } 
     else if(timetaken2 < timetaken1){ 
      type2won++; 
     } 

     Log.d("instanceof test","type 1 favoured : "+((float)type1won/(type1won+type2won)));   
+1

你的同樣是無稽之談,i和j不在循環之後使用,所以很有可能循環從正在運行的代碼中被忽略,因爲它們在運行它們時沒有意義。 – 2010-02-21 08:45:36

+0

明智的話,我應該檢查一下;謝謝。然而,這給我留下了一些問題:如何加快速度,以及爲什麼隨着「週期」的增加,時間會增加。 我會記住您在將來構建測試時所指出的內容。 – Michiel 2010-02-21 11:37:49