Pages

dimanche 22 juin 2014

ART nouvelle machine virtuelle Java pour Android

Les performances de la plateforme Android sont au cœur des préoccupations de Google. Au début d'Android, l'accent a d'abord été mis sur les fonctionnalités, pour ne pas être distancé par l'Iphone d'Apple. Mais très vite les ingénieurs de la Silicon Valley ont du se concentrer sur les performances afin d'économiser les ressources limitées d'un téléphone ou d'une tablette. 

Lorsque vous développez pour Android, vous écrivez des programmes en Java, pas le Java classique d'Oracle, mais une implémentation made in Google (lien vers le sdk). La plateforme d'exécution sur Android est aussi différente. Google a créé sa propre machine virtuelle, Dalvik afin de répondre aux exigences des différents devices (si vous voulez en savoir un peu plus sur cette dernière je vous laisse lire cet article).

Dans cet article je vais essayer d'expliquer l'histoire de cette machine virtuelle et expliquer pourquoi Google a annoncé il y a quelques mois la mise à disposition d'une nouvelle VM nommée ART.  

Qu'est qu'une machine virtuelle java (JVM) ? 
Si vous n'êtes pas familier avec le langage Java je vais faire un rapide rappel. Lorsque vous écrivez du code, vous l'écrivez dans un langage facilement interprétable par un être humain. Le résultat n'est pas optimisé pour être exécuté. Le code est donc compilé dans des instructions binaires interprétables par la machine et plus particulièrement par le processeur. Mais nous avons plusieurs sortes de processeurs, plusieurs architectures différentes (Windows, Linux, Mac..). Le résultat de la compilation ne peut pas être optimisé pour chacun. Quand vous avez un programme en C vous devez le compiler plusieurs fois pour qu'il soit utilisable sur toutes les machines.  

Le langage Java a été pensé différemment. Nous avons une étape intermédiaire qui consiste à compiler le programme en bytecode, langage binaire interprétable non pas par la machine physique, mais par une machine virtuelle. Le livrable Java est donc unique quelque soit la machine sur lequel vous l'installez. C'est la machine virtuelle qui est propre à un type d'architecture matérielle. 

Java : write once and run everywhere

Everywhere si l'éditeur propose une version de sa machine virtuelle pour tous les types d'architecture matérielle. 

Les machines virtuelles offrent d'autres avantages comme le ramasse miette (garbage collector) qui permet au développeur de s'abstenir de l'allocation mémoire. La machine est assez intelligente pour allouer de l'espace à un objet qui en a besoin et pour libérer cet espace quand l'objet n'est plus utilisé. 

Les débuts de Dalvik
Contrairement à Apple qui a un nombre limité de devices, Google a toujours voulu proposer son OS mobile à un maximum de constructeurs. Pour faciliter le travail des développeurs le langage Java était une bonne alternative.

Le bytecode accepté par Dalvik, est différent de celui utilisé dans une JVM classique. Sous Android on parle de fichiers .dex au lieu des traditionnels fichiers .class (voir cet article ou celui-ci pour plus de détails).

Chaque application Android est exécutée dans une instance de la machine virtuelle. Avant Android 2.2, Dalvik ne proposait pas forcément d'optimisation et se contentait d'exécuter du code. Les performances n'étaient pas très bonnes.

Compilation à la volée JIT 
A partir d'Android Froyo (2.2) Dalvik a repris un principe que l'on retrouve dans la plupart des VM Java, la compilation Just In Time (JIT), où le bytecode Java est traduit en langage machine à l'exécution. JIT a permis  d'améliorer considérablement les performances d'Android.

A chaque fois que vous lancez une application, la partie du code nécessaire à son exécution va être traduite en code machine. Lorsque vous progressez dans l'application, du code supplémentaire va être compilé et mis en cache. Le système peut réutiliser du code déjà mis en cache lorsqu'une même portion de code est appelée....  L'empreinte mémoire est plus faible et JIT permet de limiter l'espace physique occupé.

Compilation ART
A partir d'Android KitKat (4.4), Google propose une nouvelle machine virtuelle ART où le mode de compilation n'est plus JIT mais AOT Ahead Of Time. Le bytecode d'une application est compilé en langage machine lors de son installation. Les applications vont donc potentiellement gagner en fluidité puisque le code ne sera plus compilé à l'exécution.

Faut il utiliser ART à la place de Dalvik ?  
ART est un projet initié il y a deux ans et les travaux sont basés sur le postulat que les appareils modernes sont assez puissant en terme de vitesse de processeur et de capacité mémoire. Comme la mémoire ne coûte pas cher et que le processeur consomme de la batterie, on préfère stocker du code précompilé, plutôt que de le compiler à l'exécution.

Cet article montre les résultats des tests de performances faits sur les deux plateformes. Les gains ne sont pas très marquants en dehors de l'utilisation du CPU. Vous devez également savoir que Google ne préconise pas l'utilisation d'ART pour le moment. Il est mis à disposition des partenaires et des développeurs pour qu'ils puissent faire des tests de comptabilité.

Les temps d'installation sont plus importants car le code est compilé à ce moment là. Pour ceux qui connaissent le développement Android et les temps de déploiement ce n'est pas une super nouvelle pour les développeurs qui ont besoin de déployer souvent une application pour la tester :o).

Avec ART l'empreinte mémoire à l'exécution est aussi plus grande car toute l'application doit être chargée. Vous pourrez donc exécuter moins d'application simultanément.

Il est trop tôt pour se prononcer mais nous verrons dans le futur si ART devient la machine virtuelle par défaut. Google travaille d'abord sur la stabilité de cette machine virtuelle. On en sera peut être plus lors de la conférence Google I/O qui démarre cette semaine (25/26 juin 2014). Les rumeurs indiquent que Android 5.0 serait annoncé et que ART deviendrait la machine virtuelle par défaut.

Mise à jour le 26 juin : ART devient la VM par défaut dans Android L et même mieux Dalvik disparait complètement. Le nom de la version finale et la version n'ont pas encore été dévoilée mais la developper preview est disponible. ART a été amélioré et Google annonce de bien meilleure performance (moins de pause GC, espace dédié au gros objets comme les images,...)

Comment activer ART sur mon Android  ?
Dalvik est toujours la VM par défaut et si vous souhaitez passer à ART vous devez tout d'abord activer les fonctions de développement. Si vous ne voyez pas l'item "options développeurs" dans le menu Paramètres allez dans "A propos de la tablette" ou "A propos du téléphone", puis tapez ensuite 7 fois sur le Numéro de Build. 



Dans ces "options développeurs", sélectionnez l'item "Sélectionner le moteur d'exécution"


Cette opération prend quelques minutes puisque toutes les applications ont besoin d'être compilées. 

Quelques liens
la page Google sur ART
le fonctionnement du bytecode dalvik
mon article sur Dalvik





Aucun commentaire:

Enregistrer un commentaire

Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.