当JVM(Java虚拟机)启动时,会形成由三个类加载器组成的初始类加载器层次结构:
bootstrap classloader
|
extension classloader
|
system classloader
- bootstrap classloader -引导(也称为原始)类加载器,它负责加载Java的核心类。
- extension classloader -扩展类加载器,它负责加载JRE的扩展目录(JAVA_HOME/jre/lib/ext或者由java.ext.dirs系统属性指定的)中JAR的类包。
- system classloader -系统(也称为应用)类加载器,它负责在JVM被启动时,加载来自在命令java中的-classpath或者java.class.path系统属性或者 CLASSPATH操作系统属性所指定的JAR类包和类路径。

1. classloader 加载类用的是全盘负责委托机制。
1) 所谓全盘负责,即是当一个classloader加载一个Class的时候,这个Class所依赖的和引用的所有 Class也由这个
classloader负责载入(除非是显式的使用另外一个classloader载入):
-->放在jre的ext目录下的jar包加载优先级最高系统启动的时候它先从jre目录里找到了这个类,因为这个类又引用了
log4j的类,它就接着在jre的classpath里找,没找到 所以报异常了。
2) 委托机制:先让parent(父)类加载器 (而不是super,它与parent classloader类不是继承关系)寻找,只有在
parent找不到的时候才从自己的类路径中去寻找。
2. 此外,类加载还采用了cache机制,就是如果 cache中保存了这个Class就直接返回它,如果没有才从文件中读取和转
换成Class,并存入cache,这就是为什么我们修改了Class但是必须重新启动JVM才能生效的原因。
3. 最后,由同一个类加载器所加载的类只能引用该加载器和其父加载器所加载的其他类。
类加载顺序:
jvm先在核心类库里找需要的类,
若没有就去jre的ext下的.jar中找,
然后是当前路径,最后才在classpath里找。

- 大小: 15.5 KB

- 大小: 6.2 KB

- 大小: 40.8 KB
分享到:
相关推荐
在Java中,类加载器主要分为三个层次:Bootstrap ClassLoader、Extension ClassLoader和AppClassLoader。Bootstrap ClassLoader负责加载JDK的核心库,如rt.jar;Extension ClassLoader则加载JRE扩展目录下的jar文件...
在《classloader教程 --- from IBM》这篇教程中,作者Greg Travis通过一系列详细的讲解帮助读者理解Java中的类加载器(ClassLoader)。作为Java运行时系统的一个核心但常被忽视的部分,类加载器负责在运行时查找并加载...
在 JVM 运行过程中,类加载器会形成一个层次结构,包括引导类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和系统类加载器(System ClassLoader)。 引导类加载器(Bootstrap ...
3. Application ClassLoader:也称为系统类加载器,负责加载用户类路径`-cp`或`-classpath`指定的所有类。 当一个类被加载时,如果它的父类加载器无法加载该类,那么会将任务委派给子类加载器。这就是著名的"委托...
System.out.println("JDK提供的Object类由哪个类加载器加载--> " + classLoader); } ``` 从上述代码中可以看出,系统的类加载器是`AppClassLoader`,它的父加载器是`ExtClassLoader`,而`ExtClassLoader`的父加载...
Classloader Protocol Jar是XWiki的类加载器协议实现,它负责处理不同模块之间的类加载,确保正确隔离和交互。5.4版本可能包含了性能优化、bug修复以及对新特性的支持,以提升整体的稳定性和用户体验。 LaZyWorker...
### Java ClassLoader (类加载器)详解 #### 一、教程提示 如果你正在查看这份文档,在线版中你可以点击下面的任何主题直接跳转到相应的部分。 1. **教程提示** 2. **介绍** 3. **类加载器结构** 4. **编译类加载...
Java类加载器分为三种主要类型:引导类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader,也称为系统类加载器)。它们共同工作,确保了Java...
在这个过程中,类加载器(ClassLoader)扮演了核心角色。本文将详细讲解类加载的流程、类加载器的层次结构以及双亲委派模型。 1. **类加载的生命周期** 类的生命周期包括7个阶段:加载、验证、准备、解析、初始化...
1. **引导类加载器(Bootstrap ClassLoader)**:这是最基础的类加载器,由JVM本身实现,主要负责加载JDK核心库,如rt.jar中的类,这些类通常位于JRE的lib目录下。 2. **扩展类加载器(Extension ClassLoader)**:由...
当一个类被加载时,它首先会尝试由当前线程的Context ClassLoader进行加载,如果该类加载器无法加载,则向上委托给父类加载器,直至Bootstrap ClassLoader。这种设计可以避免类的重复加载,同时保证核心库的稳定性和...
**类加载器(ClassLoader)**是Java虚拟机(JVM)中的一个重要组成部分,它负责将编译好的`.class`文件加载到JVM中,使得这些类可以在Java环境中运行。类加载器不仅能够加载类,还能够根据不同的需求定制加载方式,如从...
《深入理解Java类加载器:基于classloader-playground开源项目》 在Java世界里,类加载器(ClassLoader)是理解JVM工作原理的关键一环。它负责将字节码文件(.class)从磁盘、网络或其他数据源加载到内存,并转化为...
Java中的类加载器分为Bootstrap ClassLoader、Extension ClassLoader和AppClassClassLoader,以及用户自定义的类加载器。Bootstrap ClassLoader负责加载JDK核心库,Extension ClassLoader加载扩展库,而...
- Java中的类加载器采用双亲委派模型,即一个类首先由启动类加载器Bootstrap ClassLoader尝试加载,如果找不到则交给扩展类加载器Extension ClassLoader,再找不到则交由应用程序类加载器AppClassLoader,最后如果...
java源码源码类加载器泄漏预防库 如果您想避免可怕的java.lang.OutOfMemoryError: Metaspace / PermGen space ,只需将此库包含到您的 Java EE 应用程序中,它就会处理剩下的事情! 要了解有关类加载器泄漏、其原因...
通过阅读《黑马程序员------类加载器学习注意点》这篇博文,以及对`classLoader.txt`文件的分析,我们可以更深入地掌握类加载器的相关知识,这对于解决实际问题和提升系统性能具有极大的帮助。在实践中不断探索和...
Java类加载器(ClassLoader)是Java虚拟机(JVM)中的一个重要组成部分,用于将Java类文件加载到JVM中,以便能够执行Java程序。在Java中,类加载器的设计采用了一种称为“双亲委派模式”(Parent Delegation Model)...
类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java ...
在Java编程语言中,类加载器(ClassLoader)是运行时环境的重要组成部分,它负责加载类的字节码到JVM中。这篇博文“JAVA类加载器分析--热部署的缺陷”探讨了Java类加载机制以及在热部署场景下可能遇到的问题。热部署...