Académique Documents
Professionnel Documents
Culture Documents
Applications
aDapatables Application
JVM
Application
NT UNIX UNIX
JVM PC PC Sparc
Motivations d’un
environnement homogène Plan
1. JVM : une infrastructure middleware
Application Application pour environnements hétérogènes
Qu’est-ce que la JVM ?
JVM
Spécification abstraite
NT UNIX UNIX Mise en œuvre concrète
PC PC Sparc Instance d’exécution
2. Exemple d’illustration
Portabilité des applications, du code 3. BCEL : adaptation de bytecode Java
Middleware et Applications aDaptables Introduction 3 Middleware et Applications aDaptables JVM / Adaptation de bytecode 4
Qu’est-ce que la JVM ? JVM : une des trois entités …
JVM (Java Virtual Machine)
Spécification abstraite
Machine virtuelle
Machine abstraite définie par une spécification Mise en œuvre concrète
long 64 bits
Sous-systèmes d’exécution
entier non signé représentant un caractère
char 16 bits
Autres types Unicode
primitifs boolean non spécifié entier 1 pour vrai et entier 0 pour faux
Constructs a new URLClassLoader for the specified URLs using the default
delegation parent ClassLoader. The URLs will be searched in the order specified for For example, an application could create a network class loader to download class files from a server. Sample code might
classes and resources after first searching in the parent class loader. Any URL that look like:
ends with a '/' is assumed to refer to a directory. Otherwise, the URL is assumed to
refer to a JAR file which will be downloaded and opened as needed. ClassLoader loader = new NetworkClassLoader(host, port);
If there is a security manager, this method first calls the security manager's
checkCreateClassLoader method to ensure creation of a class loader is allowed. Object main = loader.loadClass("Main", true).newInstance();
Parameters:
urls - the URLs from which to load classes and resources ...
Throws:
SecurityException - if a security manager exists and its checkCreateClassLoader
method doesn't allow creation of a class loader.
See Also:
SecurityManager.checkCreateClassLoader()
Sous-système d’exécution :
Sous-système d’exécution Mise en œuvre concrète (1 / 5)
Mécanisme d’exécution du bytecode contenu Différentes techniques
dans les méthodes des classes chargées Interprétation
Structures de données
Spécification de la JVM d’exécution
Comportement de la machine virtuelle en Pour exécuter un programme, la JVM a besoin de
termes de : mémoire pour stocker :
le code des classes utilisées
S o u s -s y s tè m e
In te r fa c e d e m é th o d e s n a tiv e s
Tout thread s’exécutant dans la JVM peut
d 'e x é c u t i o n L ib r a ir ie s d e m é th o d e s
n a t iv e s
accéder à toute classe chargée dans cette
JVM
Middleware et Applications aDaptables 1. JVM 33 Middleware et Applications aDaptables 1. JVM 34
o p é ra n d e 1
d ’o p é r a n d e s Lorsque le thread exécute une méthode Java
PC indique l’adresse de la prochaine instruction
F ra m e
de bytecode à exécuter
v a r ia b le n
v a r ia b le s
P ile lo c a le s
v a r ia b le 1 Lorsque le thread exécute une méthode
Java
native
Valeur du PC est indéfinie
Middleware et Applications aDaptables 1. JVM 43 Middleware et Applications aDaptables 1. JVM 44
Méthodes natives vs.
méthodes Java Pile de méthodes natives
Méthode Java Thread Java appelle une méthode native
Écrite dans le langage Java Pile Java du thread laissée de côté
Compilée vers du bytecode Utilisation de la pile de méthodes natives
Stockée dans un fichier .class
Structure de la pile de méthodes natives non définie par la
Méthode native spécification de la JVM
Écrite dans un autre langage que Java (C/C++,
assembleur) E fra m e J a v a
Compilée vers le langage natif de la machine sous-jacente f r a m e n a t if D
picoJava
Exemples de mises en œuvre Exemples de mises en œuvre
concrètes de JVM (1 / 2) concrètes de JVM (2 / 2)
JDK KVM
fourni par Sun une JVM "light" pour terminaux mobiles (téléphones, PDA)
sous-système d’exécution basé sur un interprète, compilation JIT sous-système d’exécution basé sur un interprète
et optimisation adaptative
certaines restrictions par rapport au langage Java / API Java
utilisable sur plusieurs plates-formes : Linux, Solaris, Windows,
Mac OS (types float et double non supportés)
Kaffe
distribuée en logiciel libre JavaCard
sous-système d’exécution basé sur un interprète, compilation JIT une JVM embarquée sur une carte à puce
utilisable sur plusieurs plates-formes : Linux, Solaris, Windows sous-système d’exécution basé sur un interprète
picoJava un sous-ensemble du langage Java et de la JVM
fourni par Sun pas de threads multiples, chargement dynamique de classes
mise en œuvre partiellement matérielle de la JVM
Microprocesseur avec le bytecode pour langage machine
Synthèse et Références
Middleware et Applications aDaptables JVM / Adaptation de bytecode 53 Middleware et Applications aDaptables 2. Exemple d'illustration 54
5.
Middleware et Applications aDaptables 2. Exemple d'illustration 55 Middleware et Applications aDaptables 2. Exemple d'illustration 56
Bytecode Exécution
M e t h o d In tV a lu e (in t ) 2 p u t f ie ld # 7 < F ie ld in t M e th o d v o id s u b (in t)
0 a lo a d _ 0 v a lu e > 0 a lo a d _ 0
1 in v o k e s p e c ia l # 3 5 re tu r n 1 ilo a d _ 1
< M e th o d 2 in e g
M e t h o d v o id m a in (
ja v a . la n g . O b je c t ( ) > 3 in v o k e v ir t u a l # 5
ja v a .la n g .S tr in g [ ])
4 a lo a d _ 0 < M e t h o d v o id
0 n e w # 1 < C la s s
5 ilo a d _ 1 a d d ( in t ) >
I n t V a lu e >
6 p u t f ie ld # 7 < F ie ld in t 6 re tu r n new
v a lu e >
3 dup
4 ic o n s t _ 5 M e th o d v o id a d d (in t)
pile 0 réf
9 re tu r n d’opérandes
5 in v o k e s p e c ia l # 4 0 a lo a d _ 0
M e t h o d in t < M e th o d 1 dup
g e tIn t V a lu e ( ) I n t V a lu e ( in t ) > 2 g e t f ie ld # 7 < F ie ld in t
frame
0 a lo a d _ 0 8 a s to re _ 1 v a lu e > de
1 g e t f ie ld # 7 < F ie ld in t 9 a lo a d _ 1 5 ilo a d _ 1 main
v a lu e > 1 0 ic o n s t _ 2 6 ia d d
4 ir e t u r n 1 1 in v o k e v ir t u a l # 6 7 p u t f ie ld # 7 < F ie ld in t variables 1 ? val 1 ? val
< M e th o d v a lu e > locales
M e t h o d v o id
s e t In tV a lu e (in t )
v o id s u b ( in t ) > 1 0 r e tu rn 0 null args 0 null args
1 4 r e tu rn
0 a lo a d _ 0
1 ilo a d _ 1 (a) (b)
Middleware et Applications aDaptables 2. Exemple d'illustration 57 Middleware et Applications aDaptables 2. Exemple d'illustration 58
Exécution Exécution
2 5
1 réf 1 réf invoke
dup iconst_5 special 0 astore_1
0 réf 0 réf réf
frame
de
main
1 réf val 1 réf val
réf
variables 1 val
0 null args 0 null args locales
0 null args
(g) (h) (i)
Middleware et Applications aDaptables 2. Exemple d'illustration 61 Middleware et Applications aDaptables 2. Exemple d'illustration 62
Exécution Exécution
frame de pile
add d’opérandes
(j) (k)
Middleware et Applications aDaptables 2. Exemple d'illustration 63 Middleware et Applications aDaptables 2. Exemple d'illustration 64
Exécution Plan
1. JVM : une infrastructure middleware pour
pile 1
d’opérandes 0
5
réf
environnements hétérogènes
frame de
add
(PC = 2) variables 1
locales 0
plus = -2
this = réf
1 pile
0 d’opérandes frame de 2. Exemple d’illustration
sub
Synthèse et Références
Middleware et Applications aDaptables 2. Exemple d'illustration 65 Middleware et Applications aDaptables JVM / Adaptation de bytecode 66
5.
API de BCEL :
Package de description statique Exemples de classes
décrit le format des fichiers de classes JavaClass
public String getClassName()
public ConstantPool getConstantPool()
pour la lecture/écriture de fichiers de classes public Field[] getFields()
public Method[] getMethods()
pas pour la modification du bytecode
Method
public LocalVariableTable getLocalVariableTable()
utile pour l’analyse de classes public ExceptionTable getExceptionTable()
principale classe JavaClass
Middleware et Applications aDaptables 3. BCEL 71 Middleware et Applications aDaptables 3. BCEL 72
JavaClass Lecture d’un fichier de classe
JavaClass
JavaClass clazz
clazz == Repository.lookupClass("java.lang.String");
Repository.lookupClass("java.lang.String");
System.out.println(clazz);
System.out.println(clazz);
printCode(clazz.getMethods());
printCode(clazz.getMethods());
...
...
public
public static
static void
void printCode(Method[]
printCode(Method[] methods)
methods) {{
for(int
for(int i=0;
i=0; ii << methods.length;
methods.length; i++)
i++) {{
System.out.println(methods[i]);
System.out.println(methods[i]);
Code
Code code
code == methods[i].getCode();
methods[i].getCode();
if(code
if(code !=
!= null)
null)
//// Non-abstract
Non-abstract method
method
System.out.println(code);
System.out.println(code);
}}
}}
Middleware et Applications aDaptables 3. BCEL 73 Middleware et Applications aDaptables 3. BCEL 74
Middleware et Applications aDaptables 3. BCEL 77 Middleware et Applications aDaptables JVM / Adaptation de bytecode 78
cc.writeFile();
Javassist exprime les transformations faites à un
programme Java dans le langage source Java
Middleware et Applications aDaptables 4. Javassist 79 Middleware et Applications aDaptables 4. Javassist 80
Javassist : Exemple 2 Javassist : Exemple 3
Définition d’une nouvelle classe Insertion de pré-traitement dans une méthode
public class Hello {
public void say() {
System.out.println("Hello");
ClassPool pool = ClassPool.getDefault(); }
}
CtClass cc = pool.makeClass("Point"); public class Test {
public static void main(String[] args) throws Exception {
ClassPool cp = ClassPool.getDefault();
CtClass cc = cp.get("Hello");
CtMethod m = cc.getDeclaredMethod("say");
m.insertBefore("{ System.out.println(\"Hello.say():\"); }");
Class c = cc.toClass();
Hello h = (Hello)c.newInstance(); h.say();
}
}
Middleware et Applications aDaptables 4. Javassist 81 Middleware et Applications aDaptables 4. Javassist 82
Middleware et Applications aDaptables 5. Synthèse et Références 85 Middleware et Applications aDaptables 5. Synthèse et Références 86
Manipulation de bytecode : Programming for the Java Virtual Machine, Joshua Engel,
Addison-Wesley, 1999
BCEL : http://jakarta.apache.org/bcel/ ou
http://bcel.sourceforge.net/ Java Virtual Machine, Jon Meyer, Troy Downing, O’Reilly &
JikesBT : http://www.alphaworks.ibm.com/tech/jikesbt/ Associates, 1997
Javassist : http://www.csg.is.titech.ac.jp/~chiba/javassist/ Mobilité et Persistance des Applications dans l’Environnement
ASM : http://asm.objectweb.org/ Java – Chapitre 2, Sara Bouchenak, Thèse de Doctorat de l’INPG,
2001.
JOIE : http://www.cs.duke.edu/ari/joie/
Middleware et Applications aDaptables 5. Synthèse et Références 87 Middleware et Applications aDaptables 5. Synthèse et Références 88