1/64 1.1. Java 2, les outils élémentaires Plan de ce chapitre: ........... 1. I
1/64 1.1. Java 2, les outils élémentaires Plan de ce chapitre: ........... 1. Interprétation et compilation de java 1.1 Bytecode et Compilation native 1.2 La machine virtuelle Java 1.3 JIT , Hotspot 2. Les éléments de base en Java 2.1 Tous les types élémentaires, transtypage 2.2 Variables, valeurs, constantes 2.3 Priorité d'opérateurs 3. Les opérateurs en Java 3.1 Opérateurs arithmétiques 3.2 Opérateurs de comparaison 3.3 Opérateurs booléens 3.4 Opérateurs bit level 1. Interprétation et compilation de java Rappelons qu'un ordinateur ne sait exécuter que des programmes écrits en instructions machines compréhensibles par son processeur central. Java comme pascal, C etc... fait partie de la famille des langages évolués (ou langages de haut niveau) qui ne sont pas compréhensibles immédiatement par le processeur de l'ordinateur. Il est donc nécesaire d'effectuer une "traduction" d'un programme écrit en langage évolué afin que le processeur puisse l'exécuter. Les deux voies utilisées pour exécuter un programme évolué sont la compilation ou l'interprétation : Un compilateur du langage X pour un processeur P, est un logiciel qui traduit un programme source écrit en X en un programme cible écrit en instructions machines exécutables par le processeur P. Un interpréteur du langage X pour le processeur P, est un logiciel qui ne produit pas de programme cible mais qui effectue lui-même immédiatement les 2/64 opérations spécifiées par le programme source. Un compromis assurant la portabilité d'un langage : une pseudo-machine Lorsque le processeur P n'est pas une machine qui existe physiquement mais un logiciel simulant (ou interprétant) une machine on appelle cette machine pseudo-machine ou p- machine. Le programme source est alors traduit par le compilateur en instructions de la pseudo-machine et se dénomme pseudo-code. La p-machine standard peut ainsi être implantée dans n'importe quel ordinateur physique à travers un logiciel qui simule son comportement; un tel logiciel est appelé interpréteur de la p-machine. La première p-machine d'un langage évolué a été construite pour le langage pascal assurant ainsi une large diffusion de ce langage et de sa version UCSD dans la mesure où le seul effort d'implementation pour un ordinateur donné était d'écrire l'interpréteur de p-machine pascal, le reste de l'environnement de développement (éditeurs, compilateurs,...) étant écrit en pascal était fourni et fonctionnait dès que la p- machine était opérationnelle sur la plate-forme cible. Donc dans le cas d'une p-machine le programme source est compilé, mais le programme cible est exécuté par l'interpréteur de la p-machine. Beaucoup de langages possèdent pour une plate-forme fixée des interpréteurs ou des compilateurs, moins possèdent une p-machine, Java est l'un de ces langages. Nous décrivons ci-dessous le mode opératoire en Java. 1.1 Bytecode et Compilation native Compilation native La compilation native consiste en la traduction du source java (éventuellement préalablement traduit instantanément en code intermédiare) en langage binaire exécutable sur la plate-forme concernée. Ce genre de compilation est équivalent à n'importe quelle compilation d'un langage dépendant de la plate- forme, l'avantage est la rapidité d'exécution des instructions machines par le processeur central. Programe source java : xxx.java (portable) Programe exécutable sous windows : xxx.exe (non portable) 3/64 Bytecode La compilation en bytecode (ou pseudo-code ou p-code ou code intermédiaire) est semblable à l'idée du p-code de N.Wirth pour obtenir un portage multi plate-formes du pascal. Le compilateur Javac traduit le programme source xxx.java en un code intermédiaire indépendant de toute machine physique et non exécutable directement, le fichier obtenu se dénomme xxx.class. Seule une p-machine (dénommée machine virtuelle java) est capable d'exécuter ce bytecode. Le bytecode est aussi dénommé instructions virtuelles java. Figure : un programme source Exemple.java est traduit par le compilateur (dénommé Javac ) en un programme cible écrit en bytecode nommé Exemple.class Exemple.java ------------> compilateur Javac ------> Exemple.class 1.2 La machine virtuelle Java Une fois le programme source java traduit en bytecode, la machine virtuelle java se charge de l'exécuter sur la machine physique à travers son système d'exploitation (Windows, Unix, MacOs,...) Inutile d'acheter une machine virtuelle java, tous les navigateurs internet modernes (en tout cas Internet explorer et Netscape) intègrent dans leur environnement une machine virtuelle java qui est donc installée sur votre machine physique et adaptée à votre système d'exploitation, dès que votre navigateur internet est opérationnel. Fonctionnement élémentaire de la machine virtuelle Java Une machine virtuelle Java contient 6 parties principales o Un jeu d'instructions en pseudo-code 4/64 o Une pile d'exécution LIFO utilisée pour stocker les paramètres des méthodes et les résultats des méthodes o Une file FIFO d'opérandes pour stocker les paramètres et les résultats des instructions du p-code (calculs) o Un segment de mémoire dans lequel s'effectue l'allocation et la désallocation d'objets o Une zone de stockage des méthodes contenant le p-code de chaque méthode et son environnement (tables des symboles,...) o Un ensemble de registres (comme dans un processeur physique) servant à mémoriser les différents états de la machine et les informations utiles à l'exécution de l'instruction présente dans le registre instruction bytecode en cours. Comme toute machine la machine virtuelle Java est fondée sur l'architecture de Von Neumann et elle exécute les instructions séquentiellement un à une. Figure : un synoptique de la machine virtuelle Java Les registres sont des mémoires 32 bits : o vars : pointe dans la pile vers la première variable locale de la méthode en cours d'exécution. o pc :compteur ordinal indiquant l'adresse de l'instruction de p-code en cours d'exécution. o optop : sommet de pile des opérandes. o frame : pointe sur le code et l'environnement de la méthode qui en cours d'exécution. 1.3 JIT , Hotspot L'interprétation et l'exécution du bytecode ligne par ligne peut sembler prendre beaucoup de temps et faire paraître le langage Java comme "plus lent" par rapport à d'autres langages. Aussi dans un but d'optimisation de la vitesse d'exécution, des techniques palliatives sont employées dans les version récentes des machines virtuelles Java : la technique Just-in-time et la technique Hotspot sont les principales améliorations en terme de vitesse d'exécution. JIT (Just-in-time) est une technique de traduction dynamique durant l'interprétation que 5/64 Sun utilise sous le vocable de compilation en temps réel. Il s'agit de rajouter à la machine virtuelle Java un compilateur optimiseur qui recompile localement le bytecode lors de son chargement et ensuite la machine virtuelle Java n'a plus qu'à faire exécuter des instructions machines de base. Cette technologie est disponible en interne sur les navigateurs de dernière génération. On peut mentalement considérer qu'avec cette technique vous obtenez un programme java cible compilé en deux passages : o le premier passage est dû à l'utilisation du compilateur Javac produisant du bytecode, o le second passage étant le compilateur JIT lui-même qui optimise et traduit localement le bytecode en instructions du processeur de la plate-forme. Hotspot est une amélioration de JIT. Un défaut dans la vitesse totale d'exécution d'un programme java sur une machine virtuelle Java équipée d'un compilateur JIT se retrouve dans le fait qu'une méthode qui n'est utilisée qu'une seule fois se voit compilée puis ensuite exécutée, les mesures de temps par rapport à sa seule interprétation montre que dans cette éventualité l'interprétation est plus rapide. La société Sun a donc mis au point une technologie palliative dénommée Hotspot qui a pour but de déterminer dynamiquement quel est le meilleur choix entre l'interprétation ou la compilation d'une méthode. Hotspot lancera la compilation des méthodes utilisées plusieurs fois et l'interprétation de celles qui ne le sont qu'une fois. 2. Les éléments de base en Java Tout n'est pas objet dans Java, par souci de simplicité et d'efficacité, Java est un langage fortement typé. Comme en Delphi, en Java vous devez déclarer un objet ou une variable avec son type avant de l'utiliser. Java dispose de même de type prédéfinis ou type élémentaires. 2.1 Tous les type élémentaires de Java et le transtypage les types servent à déterminetr la nature du contenu d'une variable, du résultat d'une opération, d'un retour de résultat de fonction. type élémentaire intervalle de variation nombre de bits boolean false , true 1 bit byte -128 ... +127 8 bits char caractères unicode (valeurs de 0 à 65536) 16 bits double Virgule flottante double précision ~5.10^308 64 bits float Virgule flottante simple précision ~9.10^18 32 bits int entier signé -2^31-1... +2^31 32 bits 6/64 long entier signé long -2^63-1... +2^63 64 bits short entier signé court -2^15-1... +2^15 16 bits Rappellons qu'en java toute variable qui sert de conteneur à une valeur d'un type élémentaire précis doit préalablement avoir été déclarée sous ce type. Il est possible d'indiquer au compilateur le type d'une valeur numérique en utilisant un suffixe : l ou L pour désigner un entier du type long f ou F pour désigner un réel du type float d ou D pour désigner un réel du type double. Exemples : 45l ou 45L représente la valeur 45 en entier signé sur 64 bits. 45f ou 45F représente la valeur 45 en virgule flottante simple précision sur 32 bits. 45d ou 45D représente la valeur 45 en virgule flottante double précision sur 64 bits. 5.27e-2f ou 5.27e-2F représente la valeur uploads/Industriel/ cours-java-basic.pdf
Documents similaires










-
24
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Aoû 18, 2022
- Catégorie Industry / Industr...
- Langue French
- Taille du fichier 0.9015MB