Partage
  • Partager sur Facebook
  • Partager sur Twitter

Byte code et JRE java

7 décembre 2016 à 9:18:57

Bonjour,

Je suis entrain d'apprendre le java.

Si j'ai bien compris, le programmeur écrit le code source dans un fichier .java

Puis il le précompile (transformation du code source en byte code) avec la commande javac

Puis il éxécute ce byte code dans une machine virtuelle java (JRE).

Mais pourquoi il faut d'abord transformé le code source en byte code ? La JRE ne pourrait pas le faire pour nous ?

  • Partager sur Facebook
  • Partager sur Twitter
7 décembre 2016 à 9:38:27

L'idée c'est d'avoir un code pré-compilé pour qu'une partie du travaille soit déjà fait et puisse donc ainsi "accélérer" la vitesse d’exécution (qui est en fait une interprétation du byte-code) mais le plus important c'est de garder un code qui sera interprétable sur nimporte quelle machine grâce à la machine virtuelle Java:)

De plus (je ne sais pas si s'était un but) le code compilé (dans ce cas pré compilé) n'est pas en claire, donc on a pas accès à ton code quand tu distribue un programme... En pratique il existe des "décompileurs" :/

En gros (très gros) Java se placerait comme intermédiaire entre le compilé et l'interprété, reprenant des défaut et des avantages aux deux, son gros intérêt c'est qu'un programme réalisé en Java sera utilisable sur une grande grande majorité des plateformes sans devoir créer des versions différentes. Surtout à l'heure actuelle ou presque tout le monde a java installé sur son PC :)

J'espères avoir été compréhensible :p

Bonne journée

  • Partager sur Facebook
  • Partager sur Twitter
7 décembre 2016 à 9:48:19

C'est comme si en Langage C tu disais : mais pourquoi compiler les fichiers ".c" en binaire : l'ordinateur pourrait le faire pour nous avant l'exécution ?

Java définie un standard pour la JVM : le bytecode est "normalisé".
C'est pour cela que l'on dit que Java est multi-plateforme.

Cependant :

  • La JVM dépend de la plateforme sur laquelle elle est installées (Windows/Linux/..., 32/64bits, ...)
  • Java n'est pas le seul langage à être compilé en bytecode : il existe le Scala, le Groovy, le Golo, ...

La question n'est pas bête. Cependant si on calcule le nombre de possibilités :

  • rassembler JVM + compilateur : cela nécessiterait (nombre de plateformes)*(nombre de compilateurs) installations possibles pour tout supporter
  • passer par un langage intermédiaire, le bytecode : cela nécessiterait "seulement" (nombre de plateformes)+(nombre de compilateurs) installations possibles pour tout supporter
  • Partager sur Facebook
  • Partager sur Twitter
Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
7 décembre 2016 à 12:15:50

Salut,

Petite précision concernant le fonctionnement de la JVM:

Le bytecode n'est pas totalement interprété, c'est selon la configuration et les besoins de la JVM que ce dernier sera interprété ou compilé pour améliorer drastiquement les performances.

Un exemple simple:

En mode client la JVM n'effectue pas de grosses optimisations sur le bytecode et ne compile que le strict minimum (d'où parfois les pertes de performances en cours de route).

En mode serveur, à l'inverse, elle compilera tout ce qui pourrait être potentiellement un point chaud.

Note: Quand je dis perte de perf, je ne dis pas que ça se ressent, je dis simplement que le code sera moins light.

edit: Juste pour illustrer un peu ce que je dis:

java -client -jar Minecraft.jar

679ms au démarrage

java -server -jar Minecraft.jar

725ms au démarrage

-
Edité par SongBird_ 7 décembre 2016 à 12:23:05

  • Partager sur Facebook
  • Partager sur Twitter
Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.