# Dalvik (machine virtuelle)

Dalvik est une machine virtuelle destinée aux téléphones mobiles et tablettes tactiles, qui est incorporée dans le système d'exploitation Android$^,$. Dalvik est destiné à permettre l'exécution simultanée de plusieurs applications sur un appareil de faible capacité (peu d'espace mémoire et peu de puissance de calcul).
Créé par Dan Bornstein, Dalvik fait partie du runtime, le moteur qui permet l'exécution des applications pour Android. Le nom est celui d'un village de pêcheurs en Islande, pays d'origine de son auteur.
Dalvik offre une alternative à la machine virtuelle de la technologie Java. Les fichiers de bytecode de la technologie Java sont préalablement transformés et consolidés dans un fichier .dex (Dalvik Executable) en vue de leur utilisation par Dalvik.

## Présentation

Le but d'une machine virtuelle comme Dalvik est de permettre d'exécuter le même programme sur une grande variété d'appareils, quelles que soient leurs caractéristiques techniques. Le code exécutable du programme (dit bytecode) est transformé à la volée en instructions spécifique à l'appareil sur lequel le programme est exécuté — c'est la fonction de compilation just-in-time de la machine virtuelle. Dalvik est un des composants clé d'Android. Il est destiné à permettre l'exécution simultanée de plusieurs applications sur un appareil de faible capacité (peu d'espace mémoire et peu de puissance de calcul). La capacité ordinaire des appareils mobiles contemporains de 2011 étant équivalente à celle d'un ordinateur personnel vieux de dix ans.

### La technologie Java et Dalvik

Java est un langage de programmation destiné à être utilisé sur une grande variété d'appareils, selon la devise « write once, run anywhere » (en français « écrire une fois, utiliser partout »). Les programmes écrits dans ce langage sont traduits en bytecode qui sera ensuite exécuté par une machine virtuelle telle que celle de l'environnement d'exécution Java de Oracle. L'objectif de Dalvik est de fournir une machine virtuelle alternative, adaptée aux limitations des appareils mobiles.
Dalvik exécute un bytecode différent, dont les instructions sont basées sur des registres, alors que la machine virtuelle classique de la technique Java est basée sur la pile. Une machine à registres nécessite moins d'instructions pour effectuer les mêmes opérations qu'une machine à pile et est par conséquent mieux adaptée à un appareil ayant peu de puissance de calcul. En raison de cette différence, les fichiers de bytecode Java ordinaires ne peuvent pas être exécutés tel quel par Dalvik, et un programme inclus dans le SDK Android transforme au préalable ces fichiers en DEX (Dalvik Executable) — les fichiers de bytecode pour Dalvik. Les fichiers exécutables pour Dalvik (.dex) sont créés par consolidation des fichiers de bytecode Java. La taille du fichier .dex est typiquement la moitié de la taille des fichiers de bytecode Java desquels il est issu.
La machine virtuelle Dalvik se sert des services offerts par le noyau Linux. Dans Android il est également possible de créer des applications qui n'utilisent pas Dalvik, et qui se servent directement du noyau Linux, cependant cette technique offre peu d'avantages et est rarement utilisée.
Tous les services fournis par Android ainsi que les moyens matériels des appareils sont mis à disposition à travers Dalvik. Cette machine virtuelle joue le rôle d'écran qui cache les caractéristiques techniques de l'appareil sur lequel elle est exécutée.
Dalvik est remplacé par ART à partir de la version 5 d'Android sortie en novembre 2014 (ART est disponible en version expérimentale dès Android 4.4). Cependant, à sa sortie, ART n'est pas compatible avec toutes les applications Android.