当前位置:网站首页>Déléguer un chargeur tel qu'un parent
Déléguer un chargeur tel qu'un parent
2022-07-19 11:16:00 【Tao Yuanming de la dynastie Wei occidentale】

Auteur: Tao Yuanming de la dynastie Wei occidentale
Blogs: https://blog.springlearn.cn/
Tao Yuanming de la dynastie Wei occidentale
Ne riez pas du rêve du jeune Jianghu,Qui ne rêve pas du Jianghu?
- BootStrap ClassLoader:Appelé chargeur de classe de démarrage,- Oui.JavaChargeur de classe de haut niveau dans la hiérarchie de chargement de classe,Responsable du chargementJDKBibliothèque de classe de base en,Par exemple::rt.jar、resources.jar、charsets.jarAttendez.,La procédure suivante peut être utilisée pour déterminer où ces chargeurs ont été chargés.jarOuclassDocumentation:
- Extension ClassLoader:Appelé chargeur de classe d'extension,Responsable du chargementJavaBibliothèque de classe étendue pour,Chargement par défautJAVA_HOME/jre/lib/ext/Tous sous les yeuxjar.
- App ClassLoader:Appelé chargeur de classe système,Responsable du chargement des applicationsclasspathTous dans le cataloguejarEtclassDocumentation.
Un.、Chargeur de classe
Chargement de la classe dansJVMMise en œuvre externe.Pour n'importe quelle classe,Doit être établi conjointement par le chargeur de classe qui l'a chargé et la classe elle - mêmeJavaUnicité dans la machine virtuelle.JVM Fournir un chargeur de classe moyenne .
2.、Chargeur de classe de démarrage(Bootstrap ClassLoader)
Responsable du chargement JAVA_HOME\lib Dans le catalogue,Ou par-Xbootclasspath Parameter specifies,Et par Approbation de la machine virtuelle(Identification par nom de fichier,Par exemple: rt.jar)La classe de.

Trois、Chargeur de classe d'extension(Extension ClassLoader)
Responsable du chargement JAVA_HOME\lib\ext Dans le catalogue,Ou par java.ext.dirs La variable système spécifie la classe dans le chemin Bibliothèque.

Quatre、Chargeur de classe d'application(Application ClassLoader)
Responsable du chargement du chemin de l'utilisateur(classpath)Bibliothèque de classe sur. JVM Chargement des classes par le modèle de délégation parentale,Bien sûr, nous pouvons aussi hériter java.lang.ClassLoader Mise en œuvre d'un chargeur de classe personnalisé.

Cinq、Explication du principe
ClassLoaderLe modèle de délégation parentale est utilisé pour rechercher les classes,ChaqueClassLoaderLes instances ont toutes une référence au chargeur de classe parent( Ce n'est pas une relation héréditaire. ,Est une relation contenue),Chargeur de classe intégré à la machine virtuelle(Bootstrap ClassLoader)Il n'y a pas de chargeur parent lui - même, Mais peut être utilisé comme autre ClassLoader Le chargeur parent de l'Instance .Quand unClassLoaderLorsqu'une instance doit charger une classe, Il va essayer de rechercher une classe avant , Confiez d'abord cette tâche à son chargeur de classe parent , Le processus est examiné de haut en bas , D'abord par le chargeur de classe de haut niveau Bootstrap ClassLoader Tentative de chargement , Si elle n'est pas chargée ,Pour transférer la tâche àExtension ClassLoader Tentative de chargement , Si elle n'est pas chargée ,À transmettre àApp ClassLoader Pour charger, S'il n'est pas chargé non plus , Renvoie à l'initiateur délégué , De lui au système de fichiers ou au réseau spécifié, etc. URL Charger cette classe dans . S'ils ne sont pas chargés dans cette classe, ,Alors jetezClassNotFoundExceptionAnomalie. Sinon, la classe trouvée génère une définition de classe , Et le charger en mémoire ,Renvoie enfin leClassObjet instance.
Six、 Pourquoi utiliser un modèle de délégation parentale? ?
Parce que cela évite le chargement répété,Quand le père a chargé la classe,Ce n'est pas nécessaire.ClassLoaderRechargez..Considérations de sécurité,Voyons voir.,Si ce mode de délégation n'est pas utilisé, Alors nous pouvons utiliser la personnalisation à tout moment StringPour remplacer dynamiquementjavaCoreapiTypes définis dans,Il y a un très grand danger pour la sécurité,Et la façon dont les parents confient,Pour éviter ça.,Parce queString Le chargeur de classe est déjà démarré au démarrage (Bootstrcp ClassLoader)Chargement,Donc l'utilisateur personnaliseClassLoaderOn ne peut jamais charger unString,Sauf si tu changes.JDKMoyenneClassLoaderAlgorithme par défaut pour la classe de recherche.
Sept、MaisJVMLors de la recherche d'une classe,Comment juger deux autresclassC'est la même chose?
JVMOn en juge deux.classSi oui ou non,Il ne s'agit pas seulement de déterminer si les deux noms de classe sont les mêmes.,Et pour déterminer si la même instance de chargement de classe.Seulement si les deux sont satisfaits en même temps,JVMJe pensais que ces deuxclassC'est pareil..Même si deuxclassC'est le mêmeclassBytecode,Si deuxClassLoaderInstance chargée,JVMIls sont aussi considérés comme deuxclass.
/**
* rtTable des matières:
* Chargementrt.jarChargeur de classe pour
*/
ClassLoader rtClassLoader = StringBuffer.class.getClassLoader();
System.out.println(rtClassLoader);
/**
* lib/extExtension Pack
* [email protected]
*/
ClassLoader extClassLoader = EventID.class.getClassLoader();
System.out.println(extClassLoader);
/**
* Chargeur d'application actuel
* [email protected]
*/
ClassLoader classLoader = BaseSyntaxTest.class.getClassLoader();
System.out.println(classLoader);
/**
* [email protected]
*/
ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
System.out.println(currentClassLoader);
Enfin, concentrez - vous sur,Demande d'abonnement,Merci pour la lecture!
边栏推荐
- Documents required for military product development process - advanced version
- Google Earth engine app (GEE) - set up a nighttime lighting timing analysis app in China
- Limit query of MySQL optimization series
- Unity dropdown (editable, inputable) drop-down selection box with Text Association
- How does unity3d use the asset store to download some useful resource packages
- Integrated network architecture and network slicing technology of air, earth and sea
- LeetCode 2249. Count the number of grid points in the circle
- web安全入门-部署Snort开源IDS/IPS系统
- Mpu9250 ky9250 attitude, angle module and mpu9250 MPL DMA comparison
- How much money can you make by inventing flash memory? This is a Japanese dog blood story
猜你喜欢

How much money can you make by inventing flash memory? This is a Japanese dog blood story

Deep learning for generic object detection: a survey

Mysql 自增id、uuid与雪花id

Unity3d 模型中心点的转换(源代码)

Un modèle de détection par défaut basé sur le réseau neuronal évolutif rapide dans le contrôle de la qualité des produits - lire les notes

E-commerce sales data analysis and prediction (date data statistics, daily statistics, monthly statistics)

Unity3d 读取mpu9250 例子原代码

466-82(3、146、215)

Journal日志与oplog日志的区别

LeetCode 2335. Minimum total time required to fill the cup
随机推荐
玩转CANN目标检测与识别一站式方案
E-commerce sales data analysis and prediction (date data statistics, daily statistics, monthly statistics)
Tier defect detection using full revolutionary network
Tencent cloud server uses image to deploy WordPress personal website!
Detailed explanation of Euler angle, axis angle, quaternion and rotation matrix
Tire Defect Detection Using Fully Convolutional Network-论文阅读笔记
一个报错, Uncaught TypeError: ModalFactory is not a constructor
Introduction to the universal theme system of SAP appgyver
A fastandrobust volutionalneuralnetwork based defect detection model inproductqualitycontrol reading notes
Four methods of traversing key value in map
[handwritten numeral recognition] handwritten numeral recognition based on lenet network with matlab code
Integrated network architecture and network slicing technology of air, earth and sea
2022/7/15
AT5147-[AGC036D]Negative Cycle【dp,模型转换】
How much money can you make by inventing flash memory? This is a Japanese dog blood story
QT two overloaded qlistwidget control objects implement selectitem drag drag
Category imbalance in classification tasks
LeetCode 745. Prefix and suffix search
Some methods of early MCU encryption [get data in the comment area]
Huawei machine test: Message decompression