Orange
Chargeurs de classes Java (ClassLoader) Didier Donsez
Université Joseph Fourier - Grenoble 1 PolyTech’Grenoble - LIG/ADELE
Didier.Donsez@imag.fr Didier.Donsez@ieee.fr
06/06/2009
Licence
Cette présentation est couverte par le contrat Creative Commons By NC ND http://creativecommons.org/licenses/by-nc-nd/2.0/fr/ Didier Donsez, 2002-2009, ClassLoaders
2
06/06/2009
Kequoi ca un chargeur de classes ?
Son rôle est 1) de charger le bytecode d’une classe depuis un artéfact (archive Java, répertoire distant …) 2) communiquer le bytecode à la machine virtuelle
Didier Donsez, 2002-2009, ClassLoaders
4
06/06/2009
Pourquoi utiliser les chargeurs de classes
Classes non présentes dans le CLASSPATH
URLClassLoader, AppletClassLoader, … ex: WEB-INF/classes et WEB-INF/lib d’une WebApp ex: CODEBASE d’une applet, …
Déchargement et Mise à jour du bytecode lors de l’exécution de la VM (runtime)
Chargeurs de OSGi
Modification du ByteCode à la volée au chargement
Instrumentation
Didier Donsez, 2002-2009, ClassLoaders
AOP (Aspect Oriented Programming) BCEL, ASM
Protection
Chargement de ressources associées à la classe properties, images, …
Recherche de Service Providers ou de Drivers
META-INF/services (java.util.ServiceLoader de 6.0)
5
06/06/2009
Principe de la délégation (Java 2)
Tout chargeur a un chargeur parent sauf le chargeur primordial
Tout chargeur vérifie si la classe à charger n’a pas déjà été chargée par un chargeur parent
Didier Donsez, 2002-2009, ClassLoaders
Remarque
Toute classe est attachée à un chargeur et ses instances ne peuvent en changer Un même espace de nom (classe) peut être chargé de manière séparé par plusieurs classes loaders même ou différentes versions
7
06/06/2009
Chargeur et Bibliothèque native
Classe comportant des méthodes natives La bibliothèque dynamique (.dll,.so) doit être chargée en mémoire virtuelle à l’exécution