Darbe

2010-02-13 15 views
9

bunun Android platformu üzerinde nispeten daha ağır darbe (ve Dalvik VM çalıştıran daha speciffically cep telefonları ile instanceof kelime ayı mı? Ben instanceof sanmıyorumDarbe

+0

sen şey Java karşı Android'de bir ağır etkisi olur taşımaktadır Neden? –

+4

Anthony, çünkü tamamen farklı bir VM, stack-based yerine register-based? –

+0

Niçin instanceof çöp oluşturuyor? instanceof, bir nesnenin bir tür örneğiyse, yöntem çağırma veya nesne oluşturma içermediğini test eder. Neden anlamsız bir soru soruyorsunuz, hiç mantıklı olmayan VM kavramlarına katılmıyorsunuz? –

cevap

3

ayılar mu bir Dalvik VM ağır darbe JVM aksine. Eğer herhangi bir şüpheniz varsa DDMS için bir araç olarak standart olarak gelen Tahsis Tracker adında bir araç ile uygulama çalıştırdığınızda, kendiniz için görebilirsiniz

.

+1

Bu yardımcı oldu. – Michiel

1

Bulunan t şapka instanceof çoğunlukla daha hızlıdır (zamanın yaklaşık% 60-85'i). Ancak bu oran telefonun arka plan aktivitesiyle (örn. GC, dokunma, düğmeler, sallanma vb.) Sunulduğunda düşer, ancak bu süre, zamanın% 50'sinden daha hızlı kalır. Döngü sayısı çok büyük olduğunda (yani> 1000000) neredeyse her zaman daha hızlıdır. İki döngü sırasında sunulduğu sıra (yani ilk önce instanceof döngüsü ve daha sonra alan kontrol döngüsü) sonuçları etkiler, ancak en hızlı olanı kalır.

 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

Sizin sameple saçmalıktır, i ve j döngüden sonra kullanılmaz, bu nedenle döngülerin çalışma kodundan çıkarılma olasılığı yüksektir, çünkü bunları çalıştırmanın bir anlamı yoktur. –

+0

Bilge bir söz, bunu kontrol etmeliyim; teşekkür ederim. Ancak bu bana şu soruları soruyor: Konsensiyumun nasıl daha hızlı olduğu ve 'döngü' arttığında zamanın nasıl arttığı. Gelecekte testler yaparken nelere dikkat ettiğinizi hatırlayacağım. – Michiel