一 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的类加载机制对于开发和调试基于Tomcat的应用程序至关重要。它涉及到类的查找、加载、初始化等过程,以及如何通过调整类加载器配置来优化应用性能和安全性。深入研究这些概念,能够让...
当一个类加载器收到加载类的请求时,它首先会委托父类加载器去尝试加载,只有当父类加载器无法加载时,子类加载器才会尝试自己加载。这种设计有助于维护类加载的一致性和安全性。 4. 类加载器与类的关系: 每个类...
这篇博文“JAVA类加载器分析--热部署的缺陷”探讨了Java类加载机制以及在热部署场景下可能遇到的问题。热部署允许开发者在不重启应用的情况下更新代码,提高开发效率,但同时也存在一些挑战。 首先,我们来理解类...
在提供的文档"java类加载机制.doc"中,应该会详细阐述这些概念,并可能包含实例分析和源码解读,帮助读者更好地理解和应用Java类加载机制。对于希望优化系统性能或进行底层优化的开发者来说,这是一个不可多得的学习...
2. **类加载器及类加载器的委托机制**:JVM中有三种内置的类加载器,分别是启动类加载器、扩展类加载器和应用类加载器。此外,还可以自定义类加载器。类加载器之间遵循委托机制,即下级类加载器先请求上级类加载器...
JVM采用**父类委托机制**来加载类,这意味着当一个类加载器接收到加载请求时,它首先会委托给其父类加载器尝试加载,直到达到Bootstrap类加载器(顶级加载器)。如果父类加载器找不到所需类,那么请求会回溯到子类...
默认的类加载器包括bootstrap classloader(引导类加载器)、extension classloader(扩展类加载器)和appclassloader(应用程序类加载器),它们按照双亲委托模型进行工作,从基础到具体逐层尝试加载类。...
Java的类加载器体系采用的是双亲委派模型,这意味着当一个类加载器接收到加载类的请求时,它会首先将任务委托给父类加载器,只有当父类加载器无法找到该类时,子类加载器才会尝试自己加载。 其次,自定义类加载器是...
Java类加载器遵循双亲委派模型(Parent Delegation Model),即每个类加载器在尝试加载一个类之前,都会先委托给父加载器进行加载。如果父加载器能够成功加载,则返回;否则再由子加载器继续加载。 #### 五、自定义...
这个方法会首先尝试从已加载的类中查找,如果没有找到,则会委托给父类加载器进行加载。这就是著名的"双亲委派模型"。这种模型保证了系统类的唯一性,避免了类的重复加载和安全问题。 源码分析方面,我们可以关注`...
2. **双亲委派模型**:类加载器遵循双亲委派模型,当一个类加载器收到加载类的请求时,它首先委托父类加载器去加载,只有当父类加载器无法加载时,才会尝试自己加载,这样保证了Java核心库的稳定性和安全性。...
本篇文章将深入探讨Java类文件的动态装载机制,并结合源码分析其工作原理。 Java类的装载过程主要由类加载器(ClassLoader)来完成,这是一个关键组件,它负责查找、加载和初始化类。Java类加载器分为系统类加载器...
总之,这个压缩包提供了一个深入研究JVM类加载机制的机会,无论是对`loadClass`方法的理解,还是通过`Launcher`源码分析JVM启动流程,都将增强我们对Java运行时环境的掌握。这些知识对于Java开发者,尤其是对性能...
类加载器遵循双亲委派模型,意味着当一个类加载器收到加载类的请求时,它首先会委托其父类加载器去尝试加载。只有当父类加载器无法找到对应类时,当前类加载器才会尝试自己加载。这样设计是为了保证Java核心库的...
本文将根据提供的部分内容,深入分析并扩展几个关键知识点:面向对象编程思维、Java编译与运行机制、类加载器(Class Loader)的工作原理及其实现细节、以及JDK与JRE之间的区别与联系。 #### 面向对象编程(OOP)...
在Java世界中,类加载器(ClassLoader)是Java运行时环境的重要组成部分,它负责加载类的字节码到JVM中。Tomcat作为一款广泛使用的Java应用服务器,其类加载机制有着独特的设计,特别是对Java的双亲委派模型有所突破...
- Java的类加载机制是基于委托的双亲委派模型,源码中展示了如何动态加载类,并解释了不同类型的类加载器如BootstrapClassLoader、ExtensionClassLoader和AppClassLoader的工作方式。 2. **集合框架( Collections ...
该方法接受三个参数:类加载器、代理类需要实现的接口数组以及`InvocationHandler`实例。 ```java ClassLoader loader = TargetClass.class.getClassLoader(); Class[] interfaces = {IDAO.class}; ...