扩展类加载器

扩展类加载器(Extension)

​ 扩展类加载器是指由原SUN公司实现的sun.misc.Launcher类(是​PlatformClassLoader类),它是由java语言编写,父加载器是根类加载器。负责加载<JAVA_HOME>\jre\lib\ext目录下的类库或者系统变量"java.ext.dirs"指定的目录下的类库。

以下是ExtClassLoader加载目录源码:

private static File[] getExtDirs() {
     String s = System.getProperty("java.ext.dirs");
     File[] dirs;
     if (s != null) {
         StringTokenizer st =
             new StringTokenizer(s, File.pathSeparator);
         int count = st.countTokens();
         dirs = new File[count];
         for (int i = 0; i < count; i++) {
             dirs[i] = new File(st.nextToken());
         }
     } else {
         dirs = new File[0];
     }
     return dirs;
 }
public static void main(String[] args) {
    //DNSNameService类位于dnsns.jar包中,它存在于jre/lib/ext目录下
    ClassLoader cl = DNSNameService.class.getClassLoader();
    System.out.println(cl);//打印结果sun.misc.Launcher$ExtClassLoader
}

 

参考资源链接:[深入理解Java JVM:Class文件与类加载器(ClassLoader)](https://wenku.csdn.net/doc/7j7bhyo6a5?utm_source=wenku_answer2doc_content) 在Java虚拟机(JVM)中,类加载器负责将Class文件加载到内存中,以便JVM可以执行Java程序。这个过程分为三个主要步骤:加载、链接和初始化。类加载器的工作机制非常有趣且高效,它通过一种称为“双亲委派模型”来保证Java应用的安全性和一致性。 首先,当一个类需要被加载时,JVM会首先请求引导类加载器(Bootstrap ClassLoader)尝试进行加载。引导类加载器是用本地代码实现的,负责加载Java的核心类,如`java.lang.*`和`java.util.*`等,它通常存在于JVM内部,并且没有父类加载器。 如果引导类加载器无法完成加载任务,它会将请求委托给扩展类加载器(Extension ClassLoader)。扩展类加载器负责加载JRE的扩展目录中的类,它的父类加载器是引导类加载器。这种委派机制可以保证Java核心类的安全加载,防止核心类被篡改。 如果扩展类加载器也无法找到需要加载的类,则请求进一步被传递到应用程序类加载器(Application ClassLoader)。应用程序类加载器是用于加载Classpath环境变量中指定的类的,它的父类加载器扩展类加载器。应用程序类加载器通常负责加载用户类路径(Classpath)上的类文件。 在这整个过程中,如果一个类加载器接收到一个加载类的请求,它首先会检查这个类是否已经被加载过。如果是,那么它会直接返回这个类的引用,而不会重复加载。如果未被加载,它则会向下委派给子类加载器去尝试加载。如果子类加载器也无法加载该类,父类加载器会尝试自己加载该类。 通过这种自顶向下的委托机制,Java确保了系统的安全性和类的唯一性。此外,Java还允许开发者自定义类加载器,从而实现复杂的应用需求,比如热部署和模块化应用。 对于希望深入理解类加载机制的Java开发者来说,特别是那些致力于成为系统架构师的从业者,推荐阅读《深入理解Java JVM:Class文件与类加载器(ClassLoader)》。这份文档将带给你更加全面的视角,理解类加载器的设计原则,以及如何在实际工作中应用这些知识来优化和调试Java应用程序。 参考资源链接:[深入理解Java JVM:Class文件与类加载器(ClassLoader)](https://wenku.csdn.net/doc/7j7bhyo6a5?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值