9

このinstanceofキーワードは、Android プラットフォーム (より具体的には、Dalvik VM を実行している携帯電話) に比較的大きな影響を与えますか?

4

2 に答える 2

3

instanceofJVM とは対照的に、Dalvik VM に大きな影響を与えるとは思いません。

疑問がある場合は、DDMS のツールとして標準装備されているAllocation Trackerというツールを使用してアプリケーションを実行すると、自分で確認できます。

于 2010-02-13T23:17:15.083 に答える
1

私は、instanceof がほとんど高速であることを発見しました (約 60 ~ 85% の時間)。ただし、電話にバックグラウンド アクティビティ (GC、タッチ、ボタン、シェイクなど) があると、この割合は低下しますが、instanceof は 50% 以上の時間で高速のままです。サイクル数を非常に大きくすると (つまり > 1000000)、instanceof はほぼ常に高速になります。2 つの 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 に答える