Влияние 'instanceof' в Java-коде Android - PullRequest
9 голосов
/ 14 февраля 2010

Имеет ли ключевое слово instanceof относительно сильное влияние на платформу Android (а точнее, на мобильные телефоны с виртуальной машиной Dalvik?

Ответы [ 2 ]

3 голосов
/ 14 февраля 2010

Я не думаю, что instanceof оказывает более сильное влияние на виртуальную машину Dalvik по сравнению с JVM.

Если у вас есть какие-либо сомнения, вы можете убедиться в этом сами, запустив приложение с помощью инструмента Allocation Tracker , который стандартно входит в состав инструмента для DDMS.

1 голос
/ 14 февраля 2010

Я обнаружил, что instanceof в основном быстрее (около 60-85% времени). Однако этот процент падает, когда на телефоне присутствует фоновая активность (например, ГХ, касание, кнопки, встряхивание и т. Д.), Но экземпляр остается быстрее более 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)));        
...