Dalvik Dex Format vs Java bytecode
Le monde Java
L'environnement d'exécution
Lorsque j'emploie le terme d'environnement d'exécution, je considère toutes les
étapes nécessaire pour exécuter un programme Java, après avoir écrit les lignes de code
qui le compose.
De cette définition découle naturellement les étapes de compilation et d'exécution.
Ces étapes sont bien sur commune à tous les langages de programmation mais certaines spécificités
permettent au monde Java de revendiquer un caractère dit multiplateforme.
Je vais donc vous rappeler ces spécificités.
La compilation
Dans le monde java, la compilation ne consiste pas à transformer les lignes
de code du programme en langage machine.
En effet, la compilation Java consiste à passer des lignes de code écrites par un
programmeur à un code intermédiaire qui correspond à une série d'instruction compréhensible par une JVM (Java Virtual Machine).
Ces instructions, appelées bytecode
, permettent de garantir un comportement similaire d'un même programme
quelque soit sa plateforme d'exécution.
Par exemple, un programme compilé sur une machine Linux aura strictement le même comportement qu'il soit exécuté
sur Windows, Linux, Mac Os, etc.
Ces instruction sont placées dans un fichier spécifique portant l'extension .class
.
Pour tout fichier de code Java, il existera, après compilation, un fichier .class
dans lequel, on retrouvera
le bytecode donnée pour la classe Java compilé.
L'obtention d'un fichier compiler Java (fichier .class
) de la manière la plus simple possible,
se fait grâce à la ligne de code suivante :
javac HelloWorld.java
Où
HelloWorld.javaest le fichier contenant les sources du programme.
Pour plus de détails sur l'utilisation du programme javac, voir la page de man pour linux ou pour windows.
L'exécution
Quel mécanisme est utilisé pour exécuter un fichier compiler Java, ce même fichier dont nous avons
vu quelques détails plus haut?
Grâce à une JVM (Java Virtual Machine).
Mais à quoi correspond une JVM?
Une JVM est l'organe permettant de faire la liaison entre le code intermédiaire Java et la plateforme d'exécution.
De cette manière, l'exécution d'un programme Java est identique quelque soit la plateforme où
elle est exécuté (La devise de Java : Write Once Run Anywhere).
Considérant les explications ci-dessus, il existe au minimum une JVM par plateforme.

Source: Wikipédia
Lors d'une exécution classique d'un programme Java, une JVM interprète le bytecode.
Le bytecode étant dispatcher dans plusieurs fichier .class
, la JVM charge en mémoire seulement
les classes dont elle a besoin.
Une JVM est basé sur des piles : c'est-à-dire que les suites d'instruction sont
empilé lors du chargement de la portion de code voulu, puis dépilé lors de l'exécution.
La mécanique d'exécution Java
Voici un schéma récapitulatif de la mécanique d'exécution Java :