“instanceof”在Android Java代码中的影响

时间:2010-02-13 23:10:34

标签: android performance garbage-collection dalvik instanceof

instanceof关键字是否会对Android平台产生相对较重的影响(更具体地说是运行Dalvik VM的手机?

2 个答案:

答案 0 :(得分:3)

我认为instanceof不会对反对JVM的Dalvik VM产生更大的影响。

如果您有任何疑问,可以使用名为 Allocation Tracker 的工具运行应用程序时自行查看,该工具是DDMS的标准工具。

答案 1 :(得分:1)

我发现instanceof更快(大约60-85%的时间)。但是,当手机显示背景活动(例如GC,触摸,按钮,摇动等)时,此百分比会下降,但是在50%的时间内,实例仍然会更快。当循环次数非常大(即> 1000000)时,instanceof几乎总是更快。 呈现两个while循环的顺序(即首先是循环的实例,然后是字段检查循环)会影响结果,但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)));