Impact de la 'instanceof' dans le code Java Android
-
20-09-2019 - |
Question
Est-ce que l'ours mot-clé instanceof
avec un impact relativement plus lourd sur la plate-forme Android (et plus speciffically les téléphones mobiles exécutant le Dalvik VM?
La solution
Je ne pense pas que instanceof
porte un impact plus lourd sur la machine virtuelle Dalvik opposée à la machine virtuelle Java.
Si vous avez des doutes, vous pouvez voir par vous-même lorsque vous exécutez votre application avec un outil appelé Tracker Allocation qui est livré en standard comme outil pour le DDMS.
Autres conseils
Je trouve que instanceof est le plus souvent plus rapide (environ 60-85% du temps). Toutefois, ce pourcentage tombe lorsque le téléphone est présenté avec une activité de fond (par exemple GC, toucher, boutons, secouer, etc.), mais reste plus rapide instanceof supérieure à 50% du temps. Lorsque le nombre de cycles est fait très grand (à savoir> 1000000) instanceof est presque toujours plus rapide. L'ordre dans lequel les deux boucles tandis que sont présentées (à savoir d'abord la boucle de instanceof, puis la boucle de contrôle de champ) affecte les résultats, mais reste instanceof le plus rapide.
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)));