Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
影响';instanceof';在Android Java代码中_Android_Performance_Garbage Collection_Dalvik_Instanceof - Fatal编程技术网

影响';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,因此很可能在运行代码时忽略了循环,因为运行它们没有意义。明智的评论,我应该检查一下;谢谢。但这给我留下了一些问题:一个循环是如何持续加快的,以及为什么当“周期”增加时所花费的时间会增加。我会记得你指出的当我将来构建测试时。