Machines Virtuelles Cours 3 : La machine virtuelle Java



Documents pareils
Programmation Bas Niveau

La JVM. La machine virtuelle Java. La JVM. La JVM

Carte à puce Java Card: Protection du code contre les attaques en faute

Machines virtuelles Cours 1 : Introduction

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

DG-ADAJ: Une plateforme Desktop Grid

Programmer en JAVA. par Tama

Java Avancé. Le langage Java. Rémi Forax

Traduction des Langages : Le Compilateur Micro Java

JVM. .class, chargeur et instances de Class Jeu d instructions. Cnam NFP121 jean-michel Douin, douin au cnam pt fr version 13 Décembre de l'an 7 JVM

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

UE Programmation Impérative Licence 2ème Année

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

La technologie Java Card TM

Cours 1 : La compilation

Une introduction à Java

Vérification formelle de la plate-forme Java Card

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Initiation à JAVA et à la programmation objet.

Plan du cours. Historique du langage Nouveautés de Java 7

Machines Virtuelles. et bazard autour. Rémi Forax

Éléments de programmation et introduction à Java

Mémoire de stage de Master 2

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Java c est quoi? Java pourquoi?

as Architecture des Systèmes d Information

Mécanismes pour la migration de processus

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP1 : Initiation à Java et Eclipse

Rappels d architecture

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Structurer ses données : les tableaux. Introduction à la programmation

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Cours 1: Java et les objets

Bases de programmation. Cours 5. Structurer les données

Java Licence Professionnelle CISII,

La carte à puce. Jean-Philippe Babau

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Étude de l interopérabilité de deux langages de programmation basée sur la machine virtuelle de Java

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Informatique Générale

Rappels Entrées -Sorties

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Java - la plateforme

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours d Algorithmique et de Langage C v 3.0

Programmation C. Apprendre à développer des programmes simples dans le langage C

Derrière toi Une machine virtuelle!

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

UE C avancé cours 1: introduction et révisions

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Claude Delannoy. 3 e édition C++

Vulgarisation Java EE Java EE, c est quoi?

Java Licence Professionnelle CISII,

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Cours d initiation à la programmation en C++ Johann Cuenin

Notions fondamentales du langage C# Version 1.0

Généralités sur le Langage Java et éléments syntaxiques.

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Compilation (INF 564)

Chapitre VI- La validation de la composition.

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Cours Java Native Interface

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

INF 321 : mémento de la syntaxe de Java

Introduction au langage C

Logiciel de base. Première année ENSIMAG

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

Conventions d écriture et outils de mise au point

Programmation assembleur : aperçu

Conception de circuits numériques et architecture des ordinateurs

Le langage C. Séance n 4

INITIATION AU LANGAGE JAVA

Annexe : La Programmation Informatique

Bases Java - Eclipse / Netbeans

TP, première séquence d exercices.

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Programmation en Java IUT GEII (MC-II1) 1

Solution A La Gestion Des Objets Java Pour Des Systèmes Embarqués

1 Architecture du cœur ARM Cortex M3. Le cœur ARM Cortex M3 sera présenté en classe à partir des éléments suivants :

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Génie Logiciel avec Ada. 4 février 2013

Concept de machine virtuelle

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Programmation Orientée Objet Java

Héritage presque multiple en Java (1/2)


ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

CM2 L architecture MIPS32

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

IV- Comment fonctionne un ordinateur?

Transcription:

Machines Virtuelles Cours 3 : La machine virtuelle Java Pierre Letouzey 1 pierre.letouzey@inria.fr PPS - Université Denis Diderot Paris 7 janvier 2012 1. Merci à Y. Régis-Gianas pour les transparents

Vue d ensemble de la JVM

Présentation La JVM a été initialement spécifiée par Sun MicroSystem pour exécuter le code-octet produit par les compilateurs Java. Sa spécification est publique : http://java.sun.com/docs/books/vmspec/2nd-edition/html/vmspectoc.doc.html et il en existe de (très) nombreuses implémentations : Azul VM - CEE-J - Excelsior JET - J9 (IBM) - JBed - JamaicaVM - JBlend - JRockit - Mac OS Runtime for Java (MRJ) - MicroJvm - Microsoft Java Virtual Machine - OJVM - PERC - Blackdown Java - C virtual machine - Gemstone - Golden Code Development - Intent - Novell - NSIcom CrE-ME - HP ChaiVM MicrochaiVM - HotSpot - AegisVM - Apache Harmony - CACAO - Dalvik - IcedTea - IKVM.NET - Jamiga - JamVM - Jaos - JC - Jelatine JVM - JESSICA - Jikes RVM - JNode - JOP - Juice - Jupiter - JX - Kaffe - lejos - Maxine - Mika VM - Mysaifu - NanoVM - SableVM - Squawk virtual machine - SuperWaba - TinyVM - VMkit - Wonka VM - Xam La spécification laisse une importante liberté d implémentation.

Modèle de calcul Comme la machine d OCaml, La JVM est une machine à pile. Elle a été pensée pour la programmation objet, concurrente et mobile : Appels de méthodes. Fils d exécution (threads) avec mémoire locale et mémoire partagée. Chargement dynamique de code et vérification de code-octets. Ce modèle de calcul est adapté à la compilation d autres langages. On trouve des compilateurs produisant du code-octet Java pour les langages : Ada, Awk, C, Common Lisp, Forth, Ruby, Lua et même OCaml! Un gros défaut cependant : pas de traitement des appels terminaux. (instructions présentes dans.net et dans OCaml)

Composantes de la JVM TAS Le tas est partagé entre les threads. Le code est partagé entre les threads. Chaque thread a ses propres PC et pile. Le contenu de toutes ses composantes évolue durant l exécution. Les données au format Class permettent de peupler l espace des méthodes. Thread 1 PC Pile privée... Thread N PC Pile privée Espace des méthodes Classe ou Interface 1 Code méthode m1 Code méthode mn Constante C1 Constante CN... Classe ou Interface M Code méthode m1 Code méthode mn Constante C1 Constante CN

Les valeurs de la JVM

Deux grandes familles de données La JVM manipule deux grandes familles de données : les données de types primitifs : les valeurs numériques : entières ou à virgule flottante ; les booléens ; les adresses de code. Les références qui sont des pointeurs vers des données allouées dans le tas (des instances de classe ou des tableaux). Contrairement à OCaml, il n y a pas de bit réservé pour différencier les types primitifs et les références. Le typage du code-octet garantit qu à tout instant, le type des données est celui attendu. Le ramasse-miette (GC) utilise une information de typage pour déterminer si une donnée dans le tas est un pointeur ou une constante.

Les types entiers byte 8 bits signé short 16 bits signé int 32 bits signé long 64 bits signé char 16 bits non signé

Les types flottants float 32 bits simple-précision double 64 bits double-précision Standard for Binary Floating-Point Arithmetic, ANSI/IEEE Std. 754-1985. En passant, une lecture très recommandée : What Every Computer Scientist Should Know About Floating Point Arithmetic David Goldberg (1991)

Le type booléen La spécification de la JVM définit un type booléen. Les valeurs de type booléen sont représentées par des entiers (1 pour true et 0 pour false).

Les adresses de code Les adresses de code ne sont pas modifiables par le programme.

Les types de références Il y a trois types de références. Les références vers : les instances de classes ; les implémentations d interface ; les tableaux. La référence spéciale null ne fait référence à rien et a ces trois types.

Les espaces de données

Des espaces privés et des espaces globaux Lors de son lancement, la JVM initialise les espaces de données nécessaires à l exécution du programme. Ils sont détruits lorsque la machine est stoppée. Le tas et l espace des méthodes sont des espaces globaux. Chaque thread possède une pile privée et un registre PC. Ces deux espaces données sont initialisés à la création du thread et détruits à la fin de son exécution.

Le registre PC À chaque instant, un thread est lié à une méthode courante. Le PC est une position à l intérieur du code de cette méthode.

La pile privée La pile privée sert à stocker des blocs d activation. Ce sont des espaces mémoires temporaires pour les variables locales et les résultats temporaires. La pile privée est aussi utilisée pour passer l adresse de retour d une méthode ainsi que ses arguments effectifs. On accède à un seul bloc d activation à la fois.

L espace des méthodes Pour chaque classe, l espace des méthodes contient : un ensemble de constantes ; des champs de classes partagés (les champs notés static) ; des données liées aux méthodes ; le code des méthodes et des constructeurs ; le code de méthodes spéciales pour l initialisation des instances de classes et de type d interface.

L exécution du code

L appel de méthode À chaque fois qu une méthode est invoquée, un bloc d activation est empilé. Quand l exécution de la méthode est terminée, ce bloc est dépilé. Variable locale 0 Variable locale 1... Variable locale N - 1 Pointeur vers l'espace mémoire de la classe de la méthode Espace pour la pile de calcul Organisation d un bloc d activation.

Calcul du bloc d activation Le calcul des tailles des différentes composantes du bloc d activation est effectué par le compilateur. Une variable locale a une taille de 32 bits. Les données de type long ou double utilisent deux variables locales. On accède aux variables locales via leur position dans le bloc d activation. Ces indices débutent à 0. Les variables locales sont utilisées pour stocker les arguments effectifs des appels de méthode. Par convention, le premier argument (d indice 0) contient toujours la référence vers this, c est-à-dire l instance de l objet dont on exécute la méthode. La taille maximale de pile nécessaire à l exécution d un code donné est calculable. (C est d ailleurs un bon exercice pour le cours de compilation!)

Le jeu d instructions

Résumé des instructions Les instructions de la JVM sont typées. Le nom de chaque opération est préfixée par une lettre indiquant le type des données qu elle manipule : i : int l : long s : short b : byte c : char f : float d : double a : reference Par ailleurs, les opcodes sont stockés sur un octet. Référence : http://java.sun.com/docs/books/jvms/second_edition/html/instructions.doc.html

Lecture et écriture des variables locales iload, iload_<n>, lload, lload_<n>, fload, fload_<n>, dload, dload_<n>,aload, aload_<n> Charge une variable locale au sommet de la pile de calcul. istore, istore_<n>, lstore, lstore_<n>, fstore, fstore_<n>, dstore, dstore_<n>,astore, astore_<n> Écrit le contenu du sommet de la pile dans une variable locale. bipush, sipush, ldc, ldc_w, ldc2_w, aconst_null, iconst_m1, iconst_<i>, fconst_<f>, dconst_<d> Empile une constante au sommet de la pile. wide : Modifie le sens de l instruction suivante : la prochaine instruction devra attendre un indice de variable locale codé sur 2 octets et non 1 seul.

Opérations arithmétiques Addition : iadd, ladd, fadd, dadd. Soustraction : isub, lsub, fsub, dsub. Multiplication : imul, lmul, fmul, dmul. Division : idiv, ldiv, fdiv, ddiv. Reste de la division : irem, lrem, frem, drem. Négation : ineg, lneg, fneg, dneg. Décalage : ishl, ishr, iushr, ishl, lshl, lshr, lushr. Ou sur la représentation binaire : ior, lor. Et sur la représentation binaire : iand, land. Ou exclusif sur la représentation binaire : ixor, lxor. Incrémentation d une variable locale : iincr. Comparaison : dcmpg, dcmpl, fcmpg, fcmpl, lcmp.

Conversion des types de données Conversions d élargissement : i2l, i2f,i2d, l2f, l2d,f2d. Conversions par projection : i2b,i2c, i2s, l2i, f2i, d2i, d2f. (Se reporter à la spécification pour les détails.)

Opérations sur la pile Dépiler : pop, pop2. Dupliquer le sommet de la pile : dup, dup2, dup_x1, dup2_x1, dup_x2, dup2_x2, swap.

Opérateur de flot de contrôle Branchement conditionnel : ifeq, iflt, ifle, ifne, ifgt, ifnull, ifnonnull, if_icmpeq, if_icmpne, if_icmplt, if_icmpgt, if_icmple, if_icmpge, if_acmpne. Table de saut : tableswitch, lookupswitch. Branchement inconditionnel : goto, goto_w, jsr, jsr_w, ret.

Manipulation d objets et de tableaux Création d une nouvelle instance de classe : new. Création d un nouveau tableau : newarray, anewarray, multianewarray. Accès aux champs d une classe : getfield, setfield, getstatic, putstatic. Chargement d un tableau sur la pile de calcul : baload, caload, saload, iaload, laload, faload, daload, aaload. Affectation d une case d un tableau : bastore, castore, sastore, iastore, lastore, fastore, dastore, aastore. Empile la taille d un tableau : arraylength. Vérification dynamique : instanceof, checkcast.

Invocation de méthode Invoquer une méthode avec liaison tardive (i.e. en prenant en compte le type exact de l instance considérée) : invokevirtual. Invoquer une méthode d une interface dans une instance qui l implémente : invokeinterface. Invoquer une initialisation d instance, une méthode privée ou une méthode d une classe mère : invokespecial. Invoquer une méthode de classse statique : invokestatic.

Les outils utiles

Hexedit Pour observer le contenu d un fichier au format Class, on peut toujours utiliser hexedit. Mieux : javap -c -verbose

Jasmin jasmin produit du code-octet Java. Le langage d entrée est un langage assembleur qui est plus facile à utiliser que le langage de sortie de javap.

Synthèse

Synthèse L architecture de la JVM et ses principales instructions. Mis sous le tapis : les exceptions. La prochaine séance, en TD, nous écrirons du code à l aide de jasmin.