影响

2010-02-13 89 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