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)
Ré l ti
d
éfé
bli
Ré
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 l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!