1. Le mécanisme de chargement de classe
est divisé en chargement, vérification, préparation, analyse, initialisation, utilisation et déchargement.
(1) Chargement
Recherchez sur le disque dur et lisez le fichier de bytecode via IO. Il sera chargé lorsque la classe est utilisée, par exemple en appelant la méthode main() de la classe, un nouvel objet, etc. phase de chargement, il sera chargé. Un objet java.lang.Class représentant cette classe est généré dans la mémoire, qui sert de point d'accès aux différentes données de cette classe dans la zone méthode.
(2) Vérifier
Vérifiez l'exactitude du fichier de bytecode.
(3) Préparez
à allouer de la mémoire aux variables statiques de la classe et à attribuer des valeurs par défaut.
(4) Analyse
Remplacez les références symboliques par des références directes. À ce stade, certaines méthodes statiques (références symboliques, telles que la méthode main()) seront remplacées par des pointeurs ou des handles pointant vers la mémoire où les données sont stockées ( références directes). Il s'agit du processus de liaison statique (effectué lors du chargement de la classe). La liaison dynamique est complétée pendant l'exécution du programme en remplaçant les références symboliques par des références directes. La liaison dynamique sera abordée dans la prochaine leçon.
(5) Initialisation
2. Mécanisme de délégation parentale
initialise les variables statiques de la classe à la valeur spécifiée et exécute le bloc de code statique.
Le chargeur de classe d'application AppClassLoader charge le code source du mécanisme de délégation parent de la classe. La méthode loadClass d'AppClassLoader appellera éventuellement la méthode loadClass de sa classe parent ClassLoader. La logique générale de cette méthode est la suivante :
Tout d'abord, vérifiez. si la classe portant le nom spécifié a été chargée. Si elle a été chargée, il n'est pas nécessaire de la charger à nouveau et de revenir directement.
Si cette classe n'a pas été chargée, vérifiez s'il existe un chargeur parent ; s'il existe un chargeur parent, il sera chargé par le chargeur parent (c'est-à-dire, appelez parent.loadClass(name, false);). Ou appelez le chargeur de classe bootstrap pour charger.
Si ni le chargeur parent ni le chargeur de classe bootstrap ne trouvent la classe spécifiée, alors la méthode findClass du chargeur de classe actuel est appelée pour terminer le chargement de la classe.
3. Mécanisme de délégation de responsabilité totale
« Pleine responsabilité » signifie que lorsqu'un ClassLoder charge une classe, à moins qu'un autre ClassLoder ne soit explicitement utilisé, les classes dont dépend la classe et les références sont également chargées par ce ClassLoder.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!