`

java类加载器委托机制及源码分析

    博客分类:
  • j2se
 
阅读更多

一 1.当加载一个类时,首先委派当前线程的类加载加载

      2.如果类A中引用了B java虚拟机将使用加载A的类的类加载器去加载B类

      3.还可以调用setClassLoader和loaderClass方法来指定类加载器去加载某个类

 每个类加载器加载类时有委托给他的上一级类加载器 当所有祖宗加载器都加载不到指定的类就回到发起者那里 如果发起者那里还是找不到 就会抛classNotFoundException 而不是继续让其下一级类加载器去查找

 

java虚拟机子所以采用这种加载机制 是因为为了避免同一份class文件被两个不同的类加载器加载两份同样地字节码到内存中

 

下面通过java的源码来理解java虚拟机的委托机制

protected synchronized Class<?> loadClass(String name, boolean resolve)
 throws ClassNotFoundException
    {
 // First, check if the class has already been loaded

//首先 检查这个class文件时候已经被加载过了
 Class c = findLoadedClass(name);

/如果没有被加载过 则交给他的上一级附加在器加载
 if (c == null) {
     try {

            //如果附加在器存在 则交给父加载器去查找 如果父加载器不存在 则说明他的父加载器是根加载器
            if (parent != null) {
                 c = parent.loadClass(name, false);
            } else {
                 c = findBootstrapClass0(name);
            }
     } catch (ClassNotFoundException e) {
         // If still not found, then invoke findClass in order
         // to find the class.

         //如果上级的加载器还是找不到 就会报ClassNotFoundException异常 就会调用自己实现的查找方法
         c = findClass(name);
     }
 }
 if (resolve) {
     resolveClass(c);
 }

 

每个类加载器的查找流程都是像loadClass方法里面那样的 try语句里是逐一向父加载器中查找 catch块中是逐一向下级加载器中查找

分享到:
评论

相关推荐

    java类加载器-tomcat中的类加载器

    总之,理解Java类加载器和Tomcat的类加载机制对于开发和调试基于Tomcat的应用程序至关重要。它涉及到类的查找、加载、初始化等过程,以及如何通过调整类加载器配置来优化应用性能和安全性。深入研究这些概念,能够让...

    Java的类加载器

    当一个类加载器收到加载类的请求时,它首先会委托父类加载器去尝试加载,只有当父类加载器无法加载时,子类加载器才会尝试自己加载。这种设计有助于维护类加载的一致性和安全性。 4. 类加载器与类的关系: 每个类...

    JAVA类加载器分析--热部署的缺陷(有代码示例,及分析)

    这篇博文“JAVA类加载器分析--热部署的缺陷”探讨了Java类加载机制以及在热部署场景下可能遇到的问题。热部署允许开发者在不重启应用的情况下更新代码,提高开发效率,但同时也存在一些挑战。 首先,我们来理解类...

    译 Java类加载机制(二)

    在提供的文档"java类加载机制.doc"中,应该会详细阐述这些概念,并可能包含实例分析和源码解读,帮助读者更好地理解和应用Java类加载机制。对于希望优化系统性能或进行底层优化的开发者来说,这是一个不可多得的学习...

    JVM实战-JVM类加载机制案例分析

    2. **类加载器及类加载器的委托机制**:JVM中有三种内置的类加载器,分别是启动类加载器、扩展类加载器和应用类加载器。此外,还可以自定义类加载器。类加载器之间遵循委托机制,即下级类加载器先请求上级类加载器...

    Java 类在 Tomcat 中是如何加载的(过程分析)

    JVM采用**父类委托机制**来加载类,这意味着当一个类加载器接收到加载请求时,它首先会委托给其父类加载器尝试加载,直到达到Bootstrap类加载器(顶级加载器)。如果父类加载器找不到所需类,那么请求会回溯到子类...

    网络类加载器实现

    默认的类加载器包括bootstrap classloader(引导类加载器)、extension classloader(扩展类加载器)和appclassloader(应用程序类加载器),它们按照双亲委托模型进行工作,从基础到具体逐层尝试加载类。...

    黑马程序员------类加载器学习注意点

    Java的类加载器体系采用的是双亲委派模型,这意味着当一个类加载器接收到加载类的请求时,它会首先将任务委托给父类加载器,只有当父类加载器无法找到该类时,子类加载器才会尝试自己加载。 其次,自定义类加载器是...

    java自定义类加载classloader文档,包括代码

    Java类加载器遵循双亲委派模型(Parent Delegation Model),即每个类加载器在尝试加载一个类之前,都会先委托给父加载器进行加载。如果父加载器能够成功加载,则返回;否则再由子加载器继续加载。 #### 五、自定义...

    探索JVM底层奥秘ClassLoader源码分析与案例讲解

    这个方法会首先尝试从已加载的类中查找,如果没有找到,则会委托给父类加载器进行加载。这就是著名的"双亲委派模型"。这种模型保证了系统类的唯一性,避免了类的重复加载和安全问题。 源码分析方面,我们可以关注`...

    Java源码原理分析Java源码原理分析

    2. **双亲委派模型**:类加载器遵循双亲委派模型,当一个类加载器收到加载类的请求时,它首先委托父类加载器去加载,只有当父类加载器无法加载时,才会尝试自己加载,这样保证了Java核心库的稳定性和安全性。...

    Java类文件动态装载

    本篇文章将深入探讨Java类文件的动态装载机制,并结合源码分析其工作原理。 Java类的装载过程主要由类加载器(ClassLoader)来完成,这是一个关键组件,它负责查找、加载和初始化类。Java类加载器分为系统类加载器...

    类的加载器资料.zip

    总之,这个压缩包提供了一个深入研究JVM类加载机制的机会,无论是对`loadClass`方法的理解,还是通过`Launcher`源码分析JVM启动流程,都将增强我们对Java运行时环境的掌握。这些知识对于Java开发者,尤其是对性能...

    classloader 总结

    类加载器遵循双亲委派模型,意味着当一个类加载器收到加载类的请求时,它首先会委托其父类加载器去尝试加载。只有当父类加载器无法找到对应类时,当前类加载器才会尝试自己加载。这样设计是为了保证Java核心库的...

    一个java程序员几年的技术总结

    本文将根据提供的部分内容,深入分析并扩展几个关键知识点:面向对象编程思维、Java编译与运行机制、类加载器(Class Loader)的工作原理及其实现细节、以及JDK与JRE之间的区别与联系。 #### 面向对象编程(OOP)...

    细说Tomcat如何打破双亲委派(有源码和图)

    在Java世界中,类加载器(ClassLoader)是Java运行时环境的重要组成部分,它负责加载类的字节码到JVM中。Tomcat作为一款广泛使用的Java应用服务器,其类加载机制有着独特的设计,特别是对Java的双亲委派模型有所突破...

    java_jdk8源码

    - Java的类加载机制是基于委托的双亲委派模型,源码中展示了如何动态加载类,并解释了不同类型的类加载器如BootstrapClassLoader、ExtensionClassLoader和AppClassLoader的工作方式。 2. **集合框架( Collections ...

    关于jdk动态代理的源码剖析

    该方法接受三个参数:类加载器、代理类需要实现的接口数组以及`InvocationHandler`实例。 ```java ClassLoader loader = TargetClass.class.getClassLoader(); Class[] interfaces = {IDAO.class}; ...

Global site tag (gtag.js) - Google Analytics