Maison  >  Article  >  Java  >  Explication détaillée du mécanisme de chargement de classe Java ClassLoder (image et texte)

Explication détaillée du mécanisme de chargement de classe Java ClassLoder (image et texte)

黄舟
黄舟original
2017-03-15 13:11:552079parcourir

Après l'avoir lu sur papier, je me rends compte que je dois le faire en détail --Lu You Demandez au canal s'il est clair, afin qu'il y ait une source d'eau vive - Zhu Xi


La vie entière d'une classe, depuis le moment où elle est chargée en mémoire jusqu'à l'heure à laquelle il est déchargé de la mémoire Le cycle comprend : le chargement, la vérification (Verification), la préparation (Preparetation), la résolution (Resolution),

l'initialisation (Initialisation), et utiliser (Using) , sept étapes de déchargement (Téléchargement). Où la préparation et l’analyse de la validation sont appelées liaison.





1. L'architecture chargée

1), Bootstrap Classloader démarre le chargeur de classe, qui est principalement responsable du noyau apiOu le package jar spécifié par l'option -Xbootstrap est inclus dans le travail. 2), chargeur de classe d'extension Extension ClassLoader, principalement responsable du package jar sous java_home/lib/ext

3), chargeur de classe système App CLassLoader, principalement responsable de Java -classpath/ Le chargement des classes et des packages jar dans le répertoire ;

4), chargeur de classe défini par l'utilisateur UserCustom ClassLoader, pendant l'exécution du programme, via l'enfant de Java.

lang

.Classloader Class classe de chargement dynamique

2. Caractéristiques du chargement de classe

1), chaque ClassLoader conservera son propre

espace de noms

, deux noms de classe identiques ne peuvent pas apparaître dans le même espace de noms

2), Afin d'obtenir le mécanisme de sécurité du chargeur de classes de premier niveau java

security

sandboxmodelclasses de premier niveau, Java adopte par défaut la structure « chaîne de chargement déléguée parentale ». 3. Il existe trois façons de charger les classes :

1). Lorsque l'application est démarrée depuis la ligne de commande, elle est initialisée. et chargé par la JVM.

2), chargement dynamique via la classe.

for

Name() méthode. 3), chargement dynamique via la méthode ClassLoader().loadClass().

Ces trois méthodes de chargement ont un impact sur l'exécution des blocs de code

statique

.

L'exemple suivant :

public class MyHello {    static    {
        System.out.println("hello word");    }
}public class Hello {    public static void main(String[] args) {
        ClassLoader loader=Hello.class.getClassLoader();        
        try {            
        //静态代码块不运行            
        //loader.loadClass("Test.MyHello");            
        //静态代码块运行输出hello world            
        //Class.forName("Test.MyHello");            
        //静态代码块不运行            
        //Class.forName("Test.MyHello", false, loader);            
        //静态代码块运行输出hello world            
        Class.forName("Test.MyHello", true, loader);        
        } 
        catch (ClassNotFoundException e) {            
        // TODO 自动生成的 catch 块            
        e.printStackTrace();       
         }
    }
}

1. Architecture de chargement de classe ClassLoader

1) Bootstrap Classloader démarre le chargeur de classe, qui est principalement responsable du chargement de l'API principale sous java_home/lib ou du package jar spécifié par l'option -Xbootstrap.

2), chargeur de classe d'extension Extension ClassLoader, principalement responsable du package jar sous java_home/lib/ext

3), chargeur de classe système App CLassLoader, principalement responsable de Java -classpath/ Loading des classes et des packages jar dans le répertoire ;

4), le chargeur de classes défini par l'utilisateur UserCustom ClassLoader, pendant l'exécution du programme, charge dynamiquement les classes via les sous-classes de Java.lang.Classloader

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn