Chargement dynamique
F. Mallet
Adaptation du cours de Ph. Collet et M. Buffa
http://deptinfo.unice.fr/~fmallet/
2011/2012 F. Mallet 1
Définition d’un ClassLoade
r
La JVM contient un
ClassLoader
La
JVM
contient
un
ClassLoader
Les ClassLoaders permettent de charger des
classes depuis le système de
fichiers
mais
classes
depuis
le
système
de
fichiers
,
mais
aussi depuis de multiples endroits (BD, réseau,
etc
sous forme de tableaux
etc
sous
forme
de
tableaux
Rôle :
convertir un nom de classe en tableau d’octets
représentant la classe
Class<?> c =loadClass(String nomClasse, boolean resolveIt);
2
Nom qualifié (ex: java.util.Date) Edition de lien
2011/2012 F. Mallet
Edition de lien
Vérification de la représentation binaire
Code opérations valides, saut vers le début d’une instruction,
signatures des méthodes
VerifyError
VerifyError
Préparation de la classe
Cé ti
dh
tti
t
i itili iti
à
l
l
C
r
é
a
ti
on
d
es c
h
amps s
t
a
ti
ques e
t
i
n
itili
az
iti
on
à
l
eu
r
va
l
eu
r
par
défaut => pas d’exécution de code à ce stade (=> Initialisation)
l ti
d
éfé
bli
so
l
u
ti
on
d
es r
éfé
rences sym
b
o
li
ques
Chargement des classes référencées et résolution de lien (vers
attributs
,
méthodes
,
constructeurs
)
attributs
,
méthodes
,
constructeurs
)
IllegalAccessError (accès à un champs non autorisé)
InstantiationError (instantiation d’une classe abstraite)
NoSuchFieldError
NoSuchMethodError
UnsatisfiedLinkError
NoSuchFieldError
,
NoSuchMethodError
,
UnsatisfiedLinkError
(méthode native non implémentée) 3
2011/2012 F. Mallet
Généralités sur les ClassLoaders
Toutes les JVMs ont un ClassLoader (il peut charger
certaines classes sans vérifications, JDK…)
Le CL par défaut implémente une méthode
ldl
()
i h h d l CLASSPATH l
l
oa
d
C
l
ass
()
qu
i
c
h
erc
h
e
d
ans
l
e
CLASSPATH
,
l
es
fichiers .jar et/ou .zip
On peut créer de nouveaux CL en dérivant de la classe
On
peut
créer
de
nouveaux
CL
en
dérivant
de
la
classe
ClassLoader et en redéfinissant loadClass() et/ou
les méthodes qu
elle utilise (
findClass
,…)
les
méthodes
qu elle
utilise
(
findClass
,…)
Utilisation d’un cache
Ul têthé
lfi
CL!
U
ne c
l
asse ne peu
t
êt
re c
h
arg
é
e qu
une seu
l
e
f
o
i
spar un
CL!
CL parent (SystemClassLoader par défaut)
on demande
d
abord
au parent
4
on
demande
d abord
au
parent
.
2011/2012 F. Mallet
Q
uand les classes sont-elles char
g
ées ?
Ca dé
p
end !
Q
g
p
En général quand :
Un nouvelle instance est créée
Un
nouvelle
instance
est
créée
Référence statique comme :
System out
System
.
out
,
String.class,
Class forName(
"
widget AvecFond
"
);
Class
.
forName( widget
.
AvecFond );
Bon à savoir pour améliorer le
comportement des gros programmes !
comportement
des
gros
programmes
!
Pré-charger les classes !
5
2011/2012 F. Mallet
1 / 19 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !