2014-08-29 3 views
0

J'ai écrit une méthode en Java qui consiste en une simple boucle O (n) qui crée une ArrayList et y ajoute des éléments, et prend quelques secondes pour traiter ~ 10000 entrées. Cependant, mon application Android prend 1 à 2 minutes pour effectuer la même tâche. Je ne demande pas comment résoudre ce problème en particulier, c'est juste ce qui a suscité la question dans mon esprit: quels sont les facteurs qui rendent le code Java plus lent sur un android que mon ordinateur portable?Quels facteurs affectent la vitesse d'une application Android?

Plus précisément:

  • est la puissance de traitement de l'Android inférieure?
  • Est-ce parce que l'android gère les tâches différemment?
  • Quelles mesures peuvent être prises pour rendre une application plus rapide, en particulier pour le traitement de grandes quantités de données?

Répondre

2

Type de processeur et la conception (y compris la profondeur de pipeline d'instructions, des caches, et la localité de données - probablement ARM vs Intel), les bibliothèques système, bande passante mémoire, système d'exploitation et l'environnement d'exécution mise en œuvre (l'un étant optimisé pour la vitesse, et un pour les économies d'espace/d'énergie).

Ce sont des compromis techniques nécessaires pour installer l'appareil dans votre poche avec un écran interne et une alimentation interne.

1
  1. Oui, c'est probablement le cas. Un téléphone a besoin d'un processeur plus économe en énergie et plus lent. Non, étant donné que les JRE (presque) identiques pour téléphone et ordinateur portable doivent fonctionner de manière identique, il ne devrait pas y avoir de différence. Si vous installiez Android sur votre PC et exécuteriez le code smae, il fonctionnerait aussi rapidement que sous Windows. 3. Je peux seulement vous aider à rendre le code plus efficace si vous le postez. Notez que même de petites améliorations peuvent s'ajouter si le code est exécuté 10000 fois.
+0

Votre deuxième point est complètement incorrect. Le code de bureau s'exécutera généralement dans un JRE standard (Java Runtime) tandis que Android exécutera un runtime personnalisé appelé Dalvik (et dans le futur ART - Android Runtime). Cela peut également avoir un impact considérable sur la vitesse d'exécution, car ils sont adaptés à différents objectifs de conception. – free3dom

0

Le answer donné par @Elliott Frisch est 100% correct et couvre tout ce qui a un effet sur la vitesse d'exécution.

Cependant, je pense qu'il est très important de souligner les différences entre les logiciels et la façon dont l'implentation d'exécution sur Android est complètement différente de celle habituellement utilisée sur le bureau.

Sur le bureau, le code Java est compilé à java bytecode qui est ensuite exécuté par un Java Virtual Machine. Cette machine virtuelle est généralement optimisée pour la vitesse, quel que soit le matériel et le système d'exploitation utilisés par votre ordinateur de bureau.

Du côté Android le même code Java est également compilé pour bytecode, mais il est très différent et est exécuté par le moteur d'exécution spécifique Android Dalvik, qui est (en général) optimisé pour une efficacité (économie d'énergie, etc.) au lieu de la vitesse pure. La prochaine version d'Android (L) est configurée pour remplacer cette version avec une version orientée légèrement plus rapide appelée ART (Android Runtime) - elle le fera en utilisant la compilation AOT-OF-Time (AOT) au lieu de Just-In-Time (JIT), ce qui devrait accélérer l'exécution. Considérant tout cela, on pourrait faire valoir que, étant donné le même matériel, il peut y avoir une différence de vitesse d'exécution entre le bureau et Android.Et en fait, la même chose peut être dite pour exécuter le même code Java sur différents systèmes d'exploitation de bureau (Windows vs Linux vs OSX) et différentes machines virtuelles Java. En fin de compte, même si le matériel joue le plus grand rôle dans la vitesse d'exécution, l'environnement d'exécution a un impact très important sur la vitesse d'exécution de votre code.

Questions connexes