Les applications Android sont interprétées plutôt que compilées. Cela les rend-ils plus lents que les applications iOS au moment de l'exécution?
Les applications Android sont interprétées plutôt que compilées. Cela les rend-ils plus lents que les applications iOS au moment de l'exécution?
Réponses:
Java n'est pas interprété sur Android. Les applications Android sont compilées en bytecode par le développeur. Le bytecode est une représentation compacte du programme: plus petit que le code source écrit par le programmeur, mais toujours pas directement exécutable par le CPU. Certaines optimisations, telles que la suppression de code mort, peuvent être effectuées à ce stade.
Lorsque vous chargez l'application sur un appareil, la machine virtuelle Java Dalvik compile le bytecode en code exécutable natif, juste au moment où il est sur le point de s'exécuter. Il s'agit d' une compilation juste à temps . Il provoque un bref ralentissement pendant que le programme attend d'être compilé, mais après cela, il n'y a pas de surcharge de performances, car le code a été compilé en code exécutable natif.
Il existe certains avantages en termes de performances à le faire de cette façon au lieu de compiler d'avance sur l'ordinateur du développeur. L'application peut être compilée pour le processeur particulier du téléphone, en tirant parti de ses fonctionnalités matérielles et en utilisant ses caractéristiques de performance. Par exemple, il peut utiliser des opérations matérielles en virgule flottante si le processeur le prend en charge. De plus, un compilateur JIT intelligent (certes, Dalvik n'est pas tout à fait aussi intelligent) peut surveiller la façon dont le programme s'exécute et effectuer des optimisations en fonction de la façon dont le programme est utilisé en utilisation réelle. Il pourrait recompiler le code avec une meilleure indication de branche une fois qu'il a vu quelles options sont activées et désactivées dans votre environnement, sur votre téléphone. Un compilateur initial n'a pas ces informations à utiliser.
Dalvik utilise le cache Dalvik et d'autres techniques pour atténuer les inconvénients de la compilation JIT. La nouvelle JVM pour Android L et versions ultérieures, ART, remplace entièrement le JIT par un compilateur avancé . Cela compile le bytecode en code exécutable natif lorsque l'application est installée, pour obtenir la plupart des avantages de JIT sans retarder le chargement de l'application.
N'oubliez pas que les applications Android ne sont pas entièrement constituées de Java. Les développeurs ont le NDK pour écrire tout ou partie de leurs applications en C ou C ++, pour les parties critiques de la performance de l'application, en particulier pour les jeux. Les interfaces à usage spécial comme OpenGL et Renderscript permettent aux programmeurs de profiter de matériel spécial comme le coprocesseur GPU et SIMD pour certains types de calcul.
Donc vraiment, il n'y a pas de réponse simple à votre question. L'utilisation de JIT au lieu de la compilation initiale accélère certaines choses, d'autres plus lentement. Ce n'est qu'une partie des performances globales du système d'exploitation.
Puisqu'il s'agit d'une question large, voici une réponse large.
"Les applications iOS sont-elles plus rapides que les applications Android puisque les applications Android sont interprétées?"
Tout d'abord, les applications iOS ne sont pas "plus rapides que" les applications Android.
Deuxièmement, concernant le problème "Les applications Android sont interprétées". C'est quelque chose que vous diriez sur l'informatique, comme "il y a 15 ans": comme vous pouvez le voir dans la discussion ci-dessus, la situation est beaucoup plus compliquée aujourd'hui; des technologies entièrement nouvelles sont apparues. Le concept "compilé est plus rapide qu'interprété!" était pertinent en comparant, vous savez, perl au code machine il y a 20 ans; les choses ont tellement évolué que ce problème ne peut pas être vraiment clairement appliqué à "iOS V Android" aujourd'hui.
Troisièmement, il y a d'autres problèmes dans la programmation mobile qui submergent totalement ces considérations. Juste un exemple sur le terrain, les programmeurs mobiles se font passer pour gérer de grandes listes d'images défilantes, le chargement paresseux et des problèmes similaires. La façon dont les deux systèmes d'exploitation et les diverses bibliothèques populaires gèrent ces problèmes critiques submerge souvent d'autres problèmes.
Quatrièmement, un autre problème majeur sur les mobiles est celui du chipset graphique et des diverses relations compliquées de celui-ci avec les logiciels, OpenGL, etc. Par exemple, Apple sort avec un système qu'ils appellent "Metal" par rapport à ces problèmes, et Android sort avec son propre "machin" dans ce domaine. Ces problèmes autour du pipeline graphique sont extrêmement importants pour la façon dont les applications "se sentent" dans votre main.
La réponse très courte à votre question est "compilé V. interprété" est fondamentalement un point de discussion obsolète, vous savez?
(De plus, je ne trouve pas particulièrement une Note3 "plus lente" qu'un iPhone. De plus, il s'agit en partie d'artefacts purs - il existe des téléphones Android bon marché: il n'y a tout simplement pas d'iPhone à faible performance, donc certaines personnes peuvent avoir des erreurs idées de cela.)
Parce que les applications interprétées ne signifient pas qu'elles sont toujours lentes. Parfois, ils sont plus puissants et dynamiques que ceux compilés. Comme tous les codes de l'application compilée sont compilés une fois et que la sortie est conservée sous forme de bibliothèques ou d'exécutables, tandis qu'en langage interprété, une fois peut changer aléatoirement la séquence d'exécution. Je peux donc dire que cela dépend de développeur à développeur et de la manière de programmation.
Cependant, Java (langage de programmation Android) n'est pas interprété mais est compilé en JIT. Cela signifie que les programmes Android se compilent juste avant de les exécuter, donnant des performances raisonnablement similaires à l'objectif C. d'iOS.
Plus récemment, le framework ART d'Android précompile les applications, elles sont donc exécutées de la même manière que les applications iOS. En d'autres termes, la prochaine version d'Android sera probablement aussi rapide qu'iOS.
Mise à jour
Les langages de programmation entrent généralement dans l'une des deux catégories suivantes: compilés ou interprétés. Avec un langage compilé, le code que vous entrez est réduit à un ensemble d'instructions spécifiques à la machine avant d'être enregistré en tant que fichier exécutable. Avec les langues interprétées, le code est enregistré dans le même format que vous avez entré. Les programmes compilés s'exécutent généralement plus rapidement que les programmes interprétés car les programmes interprétés doivent être réduits aux instructions machine lors de l'exécution. Cependant, avec un langage interprété, vous pouvez faire des choses qui ne peuvent pas être faites dans un langage compilé. Par exemple, les programmes interprétés peuvent se modifier eux-mêmes en ajoutant ou en modifiant des fonctions lors de l'exécution. Il est également généralement plus facile de développer des applications dans un environnement interprété car vous n'avez pas à recompiler votre application chaque fois que vous souhaitez tester une petite section.