Dalvik VM vs ART (Android Runtime): impact pour les utilisateurs finaux?

22

Avec Nexus 5 (Android 4.4 KitKat), Google a livré deux runtimes pour exécuter des applications.

Sélectionnez l'option d'exécution dans Android 4.4 KitKat Dalvik et ART Runtimes dans Android 4.4 KitKat

Quelles sont les différences entre Dalvik et ART pour les utilisateurs finaux? Comment les utilisateurs finaux peuvent-ils être affectés par cela? Y a-t-il une raison particulière pour laquelle je devrais choisir un nouveau runtime ART?

Android Quesito
la source
3
Le fait que vous deviez activer et rechercher parmi les options du développeur pour trouver ce paramètre devrait indiquer qu'il n'est pas destiné aux utilisateurs finaux.
Dan Hulme
1
@DanHulme Bon point, mais les amateurs de non-développeurs jouent toujours avec les options de développeur et ils l'utilisent même à des fins positives de non-développement à plusieurs reprises.
Android Quesito
En ce qui concerne l'expérience utilisateur, vous remarquerez seulement que la batterie est économisée dans une large mesure, ... mais vous ne pourrez pas voir la différence de vitesse lors du passage de Dalvik à ART.
Rahul Raina

Réponses:

26

Dalvik VM (Virtual Machine) est la version de Google d'une machine virtuelle Java (sur laquelle les applications s'exécutent). Les machines virtuelles maintiennent les applications isolées et indépendantes du matériel réel et d'autres applications. Mais, pour que cela fonctionne, Dalvik doit convertir ce que l'on appelle le bytecode (conçu pour la machine virtuelle) en code machine natif. Afin de minimiser la pénalité de performance introduite par la conversion du bytecode en code natif, un processus appelé compilation Just-In-Time (JIT) est effectué, qui convertit le bytecode chaud, c'est-à-dire souvent utilisé, en code natif. 1

ART (Android Runtime) remplace Dalvik qui utilise la compilation Ahead-Of-Time (AOT), ce qui signifie que vos applications sont compilées dans un état prêt à fonctionner avant même de les lancer. Cela se fait généralement, au moment de l'installation de l'application, ce qui rend le processus de lancement et d'utilisation beaucoup plus rapide et plus fluide. Et comme cela signifie que la compilation n'est effectuée qu'une seule fois, vous pouvez également voir une meilleure autonomie de la batterie.

Si l'ART est meilleur en termes de performances et d'autonomie, dois-je commencer à l'utiliser?

Non. Si vous le faites, vous risquez de casser des applications tierces. Google a livré cet aperçu ART avec Android 4.4 pour que les développeurs puissent tester leurs applications dessus.

Note latérale: L'approche de Google avec ART est de battre iOS (les applications iOS sont natives, donc elles fonctionnent mieux même sur des spécifications matérielles bas de gamme), mais je ne sais pas où cela se dirige ... Une autre fragmentation? Les constructeurs OEM sont libres de créer des appareils en utilisant l'un ou les deux . La version finale ne devrait pas affecter la plupart des applications, mais ce n'est pas 100% multiplateforme.

1 Notez que JIT a été ajouté à Dalvik dans Android 2.2

Android Quesito
la source
3
Peut-être deux faits méritent d'être notés: AOT d'ART se traduit par des applications utilisant 20 à 25% de stockage en plus par rapport à DEX. De plus, les tests sur un Nexus-5 que j'ai lu n'ont montré aucune différence de vitesse subjective ni d'endurance de la batterie. Les deux vont certainement s'améliorer, considérant que ART dans KitKat n'est qu'un aperçu des développeurs et une vérification de compatibilité (ce qui, par exemple, WhatsApp a échoué). J'appuie donc la conclusion de Sachin: ce n'est pas encore bon pour les utilisateurs finaux.
Izzy
2
Excellente réponse. J'ai pris la liberté de l'améliorer un peu. Mais je ne suis pas d'accord avec le dernier paragraphe: ART n'augmente pas la fragmentation: si ART est considéré comme prêt pour la production, peu importe si votre application est exécutée par Dalvik ou ART, les deux utilisent le même format .dex comme point de départ. Seul ART fait AOT compiler le .dex en code natif.
Flow