M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et...

25
M3105 Conception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Transcript of M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et...

Page 1: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

M3105 Conception et programmation

objet avancéesJVM

Thomas NowakUniversité Paris-Saclay

Page 2: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Machines non-virtuelles

ALU

R1 R2

R1

add R1, R2

Page 3: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

else if(strncmp(op, "add", OP_LEN) == 0) { int *op1 = find_reg(arg1); int *op2 = find_reg(arg2); int *res = op1; *res = *op1 + *op2; program_counter++; } else if(strncmp(op, "sub", OP_LEN) == 0) { int *op1 = find_reg(arg1);

Machines virtuelles

ALU

R1 R2

R1

add R1, R2add R1, R2

Page 4: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Machines virtuelleselse if(strncmp(op, "add", OP_LEN) == 0) { int *op1 = find_reg(arg1); int *op2 = find_reg(arg2); int *res = op1; *res = *op1 + *op2; program_counter++; } else if(strncmp(op, "sub", OP_LEN) == 0) { int *op1 = find_reg(arg1);

Page 5: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Runtime• runtime = environnement d’exécution de code

• implémente le modèle de calcul du langage de programmation

• ex : C calling conventions

• passage de paramètres/valeurs de retour, caller/callee saved registers

• ex : interpreter Python

• ex : machine virtuelle Java

Page 6: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Java Virtual Machine (JVM)• machine virtuelle conçue pour exécuter Java

• spécification qui laisse ouvert qq détails

• implémentations pour plusieurs systèmes d’exploitation

• but : indépendance du système

• exécute le bytecode Java qui est produit par le compilateur de Java (javac)

• JVM de Oracle : HotSpot (écrite en C++)

Page 7: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Java Virtual Machine (JVM)

Page 8: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Fichiers .class• .java → javac → .class

• 1 classe par fichier .class, plusieurs fichiers .class générés si plusieurs classes dans un fichier .java

• contenu :

• magic word

• constantes, champs, méthodes

• méta-données

• afficher les instructions d’une classe : javap -c NomDeLaClasse

Page 9: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Machines à pile

pile

op1

op2

iadd

pile

op1+op2

Page 10: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Machines à pile

pileiload_0

pile

loc. var #0

Page 11: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Machines à pile

pileistore_0

pile

val

Page 12: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Machines à pileint i;

i = 1;

++i;

iconst_1 istore_0 iload_0 iconst_1 iadd istore_0

Page 13: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Types de la JVM

• référence (à un objet ou un tableau)

• int (32 bit)

• long (64 bit)

• float (32 bit)

• double (64 bit)

Page 14: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Instructions de la JVM• instructions typées

• arithmétiques : iadd, isub, fadd, fsub, …

• load/store : iload, astore, …

• conversions : i2s, i2l, i2d, …

• création/manipulation d’objets : new, getfield, …

• manipulation directe de pile : swap, dup, …

• conditionnels, sauts : ifeq, goto, …

• invocations de méthodes : invokevirtual, invokestatic, …

Page 15: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Passage de paramètres

Page 16: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Objets dans la JVM

Page 17: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Langages JVM• JVM exécute du bytecode, pas nécessairement produit à partir d’un

fichier .java

• d’autres langages qui produisent du Java bytecode :

• Groovy

• Scala

• JRuby, Jython

• Kotlin

• Clojure

Page 18: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Multi-méthodes et langages dynamiques

• instruction normale pour appeler des méthodes : invokevirtual

• dépend du type dynamique de l’objet (dynamic dispatch)

• mais ne dépend pas des types dynamiques des paramètres (car Java n’a pas de multi-méthodes)

• la JVM (après version 7) contient une instruction pour dépendre des types dynamiques des paramètres : invokedynamic

• permet d’implémenter des langages dynamiques (plus facilement)

Page 19: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Interprétation, JIT, AOT

• les premières JVM ont interprété le bytecode instruction par instruction

• JVM modernes : compile des méthodes souvent utilisées

• lors de l’exécution : just-in-time (JIT) compilation

• à partir de Java 9 : ahead-of-time (AOT) compilation possible

Page 20: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Pile vs tas• variables/constantes dans la pile : implicitement détruits

au retour d’une méthode (pop du stack frame)

• variables/constantes dans le tas : destruction n’est pas implicite, car pas d’ordre temporel des objets dans le tas

• source importante d’erreurs en C++ : gestion d’objets dans le tas, en particulier oubli de détruire (memory leak)

• alternative de gestion manuelle : garbage collection automatique par le runtime

Page 21: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Garbage collection• garbage collection = identification et destruction

automatique d’objets qui ne seront plus utilisés

• mécanisme de base : identification d’objets qui ne sont plus accessibles à partir des références actives

• choix important du moment de la collection

• but : éviter de bloquer l’exécution du programme

• défi supplémentaire : fragmentation de la mémoire

Page 22: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Reference counting• idée : on compte le nombre de références à chaque objet

• si compte = 0, alors détruire l’objet

• utilisé dans les shared_ptr en C++

• la destruction d’un objet peut (transitivement) provoquer la destruction d’un grand nombre d’autres objets ; problématique si destruction immédiate

• problème de références cycliques

Page 23: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Mark-and-Sweep• mark : calcul de l’ensemble des successeurs dans le

graphe dirigé des objets et leurs références

• sweep : destruction de tous les objets qui ne sont pas marqués

• moment de l’exécution de la collection :

• stop-the-world

• concurrent

Page 24: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

Générations

• observation : la plupart des objets a une durée de vie très limitée

• idée : séparation entre objets jeunes et vieux ; création dans la jeune génération, puis copie dans la vieille génération après un certain temps

• peut diminuer la fragmentation

Page 25: M3105 Conception et programmation objet avancéesnowak/teaching/cpoa/JVM.pdfConception et programmation objet avancées JVM Thomas Nowak Université Paris-Saclay

JVM

• JVM = machine virtuelle pour indépendance du système d’exploitation

• machine à pile

• utilisée par d’autres langages

• tous les objets et tableau dans le tas

• garbage collection