183 votes

Qu'est-ce qu'un ClassLoader Java ?

En quelques phrases simples, qu'est-ce qu'un ClassLoader Java, quand est-il utilisé et pourquoi ?

OK, j'ai lu un article de wiki. ClassLoader charge les classes. OK. Donc si j'inclus des fichiers jar et que j'importe, un ClassLoader fait le travail.

Pourquoi devrais-je m'embêter avec ce ClassLoader ? Je ne l'ai jamais utilisé et je ne savais pas qu'il existait.

La question est la suivante : pourquoi la classe ClassLoader existe-t-elle ? Et aussi, comment l'utiliser en pratique ? (Les cas existent, je sais.)

0 votes

Vous obtiendrez de meilleurs résultats si vous précisez votre question, par exemple en indiquant une partie spécifique que vous ne comprenez pas, le lien avec une autre langue que vous connaissez, etc.

77 votes

Il s'agit d'une question tout à fait raisonnable, si l'on se place du point de vue de quelqu'un qui cherche quelques phrases simples pour expliquer le concept

1 votes

Cette vidéo pourrait vous intéresser : Vous avez vraiment des chargeurs de classe ?

1voto

Les chargeurs de classes sont hiérarchisés. Les classes sont introduites dans la JVM lorsqu'elles sont référencées par leur nom dans une classe qui s'exécute déjà dans la JVM.

Comment la toute première classe a été chargée ?
La toute première classe est chargée avec l'aide de static main() déclarée dans votre classe. Toutes les classes chargées ultérieurement sont chargées par les classes qui sont déjà chargées et en cours d'exécution.

Un chargeur de classe crée un espace de nom. Tous les sites JVM comprennent au moins un chargeur de classes intégré à la JVM appelé le primordial (ou bootstrap) chargeur de classe. C'est une chose, et nous allons nous pencher sur les chargeurs de classes non primordiaux. La JVM possède des crochets qui permettent d'utiliser des chargeurs de classe définis par l'utilisateur à la place du chargeur de classe primordial. Voici les chargeurs de classe créés par la JVM.

Bootstrap (primordial) Ce chargeur de classe n'est pas rechargeable. Charge les classes internes du JDK, les paquets java.* (typiquement charge rt.jar et i18n.jar). Extesions Ce chargeur de classe n'est pas rechargeable. Charge les fichiers jar du répertoire des extensions du JDK (généralement lib/ext du JRE). Système Ce chargeur de classes n'est pas rechargeable. Charge les classes depuis le chemin des classes du système.

http://www.sbalasani.com/2015/01/java-class-loaders.html

1voto

Stas S Points 80

Si vous vous demandez pourquoi la classe ClassLoader existe, la raison en est assez simple : c'est la classe responsable de l'exécution des tâches suivantes recherche et chargement des fichiers de classe au moment de l'exécution .

Développons-le.

Dans la JVM, chaque classe est chargée par une instance de java.lang.ClassLoader . Chaque fois qu'une nouvelle JVM est démarrée par votre programme Java habituel qui lance java <classname> la première étape est de charger en mémoire toutes les classes clés nécessaires au bon fonctionnement comme java.lang.Object et d'autres classes d'exécution ( rt.jar ).

Maintenant, il y a en fait 3 parties à ClassLoader :

  • Le site BootstrapClassLoader est responsable de la mise à disposition de ces classes disponibles, c'est-à-dire de les charger en mémoire.

  • La tâche suivante consiste à charger toutes les bibliothèques externes / JARs dans le fichier mémoire pour le bon fonctionnement de l'application. Le site ExtClassLoader est responsable de cette tâche. Ce chargeur de classe est responsable de charger tous les fichiers .jar mentionnés dans le chemin java.ext.dirs.

  • Le troisième et le plus important chargeur de classe est le AppClassLoader . Le chargeur de classe de l'application est responsable du chargement des fichiers de classe mentionnés dans la propriété système java.class.path.

Il est également important de noter que les implémentations par défaut du ClassLoader peuvent être remplacées, ce qui vous permet de personnaliser la JVM de manière utile et intéressante, en redéfinissant complètement la manière dont les fichiers de classe sont introduits dans le système.

enter image description here

Consultez-le pour en savoir plus sur Chargeur de classe Java .

0voto

yoAlex5 Points 2350

ClassLoader

ClassLoader est une partie de l'environnement d'exécution Java (JRE) qui dynamiquement charge les classes (objets de l'environnement) - java.lang.Class et les fichiers .class ) dans la JVM (Java Virtual Machine). JRE utilise chargement paresseux des classes (à la demande), cela permet de réduire l'empreinte mémoire. Lorsque l'application a besoin d'une classe, JRE demande à ClassLoader de charger cette classe.

Il existe une hiérarchie de la classe ClassLoader

  • BootStrap ou Primodial - Racine et est intégré(retourne null quand getClassLoader()) Classes JDK. Charge les classes de rt.jar
  • Extension(Platform Java v9) - classes de base en java. Charge les classes depuis le répertoire jre/lib/ext ou depuis la propriété système java.ext.dirs.
  • Système/Application - classes d'application de classpath [À propos] ou option de ligne de commande (-cp, -classpath)

Vous pouvez également créer votre propre classe ClassLoader pour votre cas spécifique. Par exemple, charger une classe depuis un dépôt, travailler avec le versionning, le déchargement, la sécurité

Pour vérifier qui charge exactement votre classe, utilisez getClassLoader()

SomeClass.class.getClassLoader()

Trouver la classe flow(modèle de délégation)

child classloader find in cache 
    if not 
        parent classloader find in cache 
            if not
        parent classloader try to load
    if not
child classloader try to load

[ClassNotFoundException vs NoClassDefFoundError et chargement de classe implicite vs explicite].

[iOS Dynamic Linker]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X