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

HelloWorld.java est 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.


Schéma illustrant 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 :
java World schéma