9

关键字是否instanceof对 Android 平台(尤其是运行 Dalvik VM 的手机)产生了相对较大的影响?

4

2 回答 2

3

我认为instanceof与 JVM 相反,对 Dalvik VM 的影响并不大。

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

于 2010-02-13T23:17:15.083 回答
1

我发现 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)));        
于 2010-02-14T01:35:00.003 回答