Chargement de classe
Le chargement de la classe fait référence à la lecture des données binaires du fichier de classe .class dans la mémoire, à la mettre dans la zone de méthode de la zone de données d'exécution, puis à la création d'un objet java.lang.classe dans la zone de tas pour utiliser l'encapsuler la structure de données de la classe dans le domaine de la méthode.
Comment charger des fichiers.
1. Chargez directement à partir du système local
2. Téléchargez le fichier .class via Internet
3. Chargez des fichiers .classe à partir de zip, jar, etc.
4. Extraire .classe des fichiers de la base de données propriétaire
5. Compiler dynamiquement les fichiers source Java dans des fichiers .class
Le produit final du chargement de classe est un objet de classe situé dans la zone du tas.
L'objet de classe résume la structure de données de la classe dans la zone de méthode et fournit aux programmeurs Java une interface pour accéder à la structure de données dans la zone de la méthode.
Il existe deux types de chargeurs de chargement de classe:
1. Le chargeur qui est livré avec Java Virtualizer
Chardeur de classe racine (bootstrap)
Chargeur de classe d'extension (extension)
Chargeur de classe système ou chargeur d'application (système)
Les deux derniers chargeurs sont implémentés en Java, et le chargeur de classe racine est écrit en C ++, et les programmeurs ne peuvent pas obtenir cette classe dans le code Java.
2. Chardeur de classe définie par l'utilisateur
Sous-classe de java.lang.classloadher
Les utilisateurs peuvent personnaliser la méthode de chargement de la classe
Le chargeur de classe n'a pas besoin d'attendre qu'une classe soit d'abord utilisée activement avant de la charger.
La spécification JVM permet aux chargeurs de classe de précharger une classe lorsqu'ils s'attendent à ce qu'il soit utilisé. Signaler une erreur (LinkageError). Si cette classe n'a pas été activement utilisée par le programme, le chargeur de classe ne rapportera pas d'erreur.
Mécanisme de désinstallation de classe
Le cycle de vie d'une classe.
Lorsque l'objet de classe représentant la classe d'échantillonnage n'est plus référencé, c'est-à-dire qu'il ne peut pas être touché, l'objet de classe mettra fin au cycle de vie et les données de la classe d'échantillons dans la zone de la méthode seront également déchargées, terminant ainsi la vie Cycle de la classe d'échantillons.
On peut voir que lorsqu'une classe se termine, son cycle de vie dépend du lorsque l'objet de classe le représentant termine son cycle de vie.
Chargeur de relation de référence et objets de classe:
Dans l'implémentation interne du chargeur de classe, une collection Java est utilisée pour stocker des références à la classe chargée.
D'un autre côté, un objet de classe fait toujours référence à son chargeur de classe. Appelez la méthode getClassloader () de l'objet de classe pour obtenir son chargeur de classe.
On peut voir qu'il existe une relation bidirectionnelle entre l'instance de classe et le chargeur qui le charge.
Objet de classe, objet de classe, objet d'instance de classe:
Une instance d'une classe fait toujours référence à l'objet de classe représentant la classe.
La méthode getClass () est définie dans la classe d'objets, qui renvoie une référence à l'objet de classe représentant la classe à laquelle appartient l'objet.
De plus, toutes les classes Java ont une classe de propriété statique qui fait référence à l'objet de classe représentant cette classe.
Désinstaller la classe
Les classes chargées par le chargeur de classe accompagnée de la machine virtuelle Java ne seront jamais désinstallées pendant le cycle de vie de la machine virtuelle.
Comme mentionné précédemment, les chargeurs de classe fournis avec les machines virtuelles Java incluent les chargeurs de classe racine, les chargeurs de classe d'extension et les chargeurs de classe système.
La machine virtuelle Java lui-même fait toujours référence à ces chargeurs de classe, et ces chargeurs de classe se réfèrent toujours aux objets de classe de la classe qu'ils chargent, de sorte que ces objets de classe sont toujours accessibles.
Les classes chargées par des chargeurs de classe définies par l'utilisateur peuvent être déchargées.
Exemples spécifiques
La variable Loader1 et la variable OBJ appliquent indirectement l'objet de classe représentant la classe d'échantillonnage, tandis que la variable ObjClass le fait directement références.
Si les trois variables de référence sur le côté gauche de l'image ci-dessus sont définies sur NULL pendant l'opération du programme, l'objet de l'échantillon met fin à son cycle de vie, l'objet MyClassloader met fin à son cycle de vie et que l'objet de classe représentant la classe d'échantillon termine également sa vie Cycle.
Lorsque cela est nécessaire, il vérifie si l'objet de classe de la classe d'échantillons existe. sera généré dans la zone de tas de la machine virtuelle Java.