影响';instanceof';在Android Java代码中
影响';instanceof';在Android Java代码中,android,performance,garbage-collection,dalvik,instanceof,Android,Performance,Garbage Collection,Dalvik,Instanceof,instanceof关键字对Android平台(更具体地说是运行Dalvik VM的手机)的影响相对较大吗?我不认为instanceof对Dalvik VM而不是JVM的影响较大 如果您有任何疑问,您可以自己看看,当您使用一个名为Allocation Tracker的工具运行应用程序时,该工具是DDMS的标准工具。我发现instanceof的速度更快(大约60-85%的时间)。但是,当手机显示后台活动时,这个百分比会下降(例如GC、触摸、按钮、摇动等)但instanceof在超过50%的时间内保
instanceof
关键字对Android平台(更具体地说是运行Dalvik VM的手机)的影响相对较大吗?我不认为instanceof
对Dalvik VM而不是JVM的影响较大
如果您有任何疑问,您可以自己看看,当您使用一个名为Allocation Tracker的工具运行应用程序时,该工具是DDMS的标准工具。我发现instanceof的速度更快(大约60-85%的时间)。但是,当手机显示后台活动时,这个百分比会下降(例如GC、触摸、按钮、摇动等)但instanceof在超过50%的时间内保持较快。当循环次数非常大(即>1000000)时,instanceof几乎总是较快。 两个while循环的显示顺序(即先是instanceof循环,然后是field check循环)会影响结果,但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)));
AbstractParticle circleParticle=新circleParticle();
整数周期=100000
long now1=System.currentTimeMillis();
int i=0;
虽然(iWhy you’t you’t you’t you’t you’t you’t you’t you’t you’t you’t you’t will’t will’t will’t will’t will’t will’t will’t will’t will’t will’t will’t will’t will’t will’s will’t will’s will’t will’t.你为什么认为它在“你为什么问一个毫无意义的问题?”我在事后才知道我做了什么,对吧?为了不理智,我把它从原来的帖子中删除了。@mP.Android在反射方面是出了名的糟糕。所以很自然地,Michiel问使用instanceof是否有任何性能上的影响,因为它们有点相似。这根本不是一个愚蠢的问题。我认为你的问题是胡说八道循环后不使用j,因此很可能在运行代码时忽略了循环,因为运行它们没有意义。明智的评论,我应该检查一下;谢谢。但这给我留下了一些问题:一个循环是如何持续加快的,以及为什么当“周期”增加时所花费的时间会增加。我会记得你指出的当我将来构建测试时。