Orange

Pages: 7 (1683 mots) Publié le: 16 juillet 2012
http://membres-liglab.imag.fr/donsez/cours

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 ressourcesassocié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, ClassLoadersRemarque
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écutiondu code statique d’initialisation
Juste après le chargement/vérification

lors de l’appel de la méthode « wrapper »

Exemple
class NativeTest { private static islibloaded=false; private native String nativefnc(String param); // JNI private void loadlib() throws throws SecurityException, UnsatisfiedLinkError { System.loadLibrary("MYLIB"); islibloaded=true; } public String fnc(String param) {if(!islibloaded) loadlib(); return fnc(param); } }
8
Didier Donsez, 2002-2009, ClassLoaders

06/06/2009

Arbre de délégation
ClassLoader bootstrap ou primordial
Charge les classes de boot (rt.jar) Natif (C) et intégré à la VM Pas de Vérification du ByteCode au chargement Sa référence est null sun.misc.Launcher$ExtClassLoader (extension) Charge les classes des jarfiles présents dans lerépertoire des extensions standards Pas de Vérification du ByteCode au chargement Son parent dans l’arbre de délégation est le CL primordial Écrit en Java sun.misc.Launcher$AppClassLoader (application ou system) Charge les classes des répertoires/jarfiles du CLASSPATH Vérification du ByteCode au chargement Sa référence est donnée par ClassLoader.getSystemClassLoader() Son parent dans l’arbre dedélégation est ExtClassLoader Écrit en Java
9

Didier Donsez, 2002-2009, ClassLoaders

06/06/2009

Arbre de délégation
Affichage de l’arbre de délégation
ClassLoader loader=getClass().getClassLoader(); System.out.println("ClassLoader delegation tree"); ClassLoader traceloader=loader; for(int i=0;;i--) { if(traceloader==null) { System.out.println("classloader("+i+")=primordial"); break; } else {System.out.println("classloader("+i+")="+traceloader); traceloader=traceloader.getParent(); } } classloader(0)=donsez.CryptoClassLoader@2152e6 classloader(-1)=sun.misc.Launcher$AppClassLoader@bac748 classloader(-2)=sun.misc.Launcher$ExtClassLoader@7172ea classloader(-3)=primordial

Didier Donsez, 2002-2009, ClassLoaders

10

06/06/2009

classes chargées par des chargeurs différents...
Lire le document complet

Veuillez vous inscrire pour avoir accès au document.

Vous pouvez également trouver ces documents utiles

  • Orange
  • Orange
  • Orange
  • Orange
  • Orange
  • Orange
  • Orange
  • Orange

Devenez membre d'Etudier

Inscrivez-vous
c'est gratuit !