什么是类加载器?
与普通程序不同的是,Java程序(class文件)并不是本地的可执行程序。当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Java class加载到JVM里头运行,负责加载Java class的这部分就叫做Class Loader。
JVM本身包含了一个ClassLoader称为Bootstrap ClassLoader,和JVM一样,BootstrapClassLoader是用本地代码实现的,它负责加载核心JavaClass(即所有java.*开头的类)。另外JVM还会提供两个ClassLoader,它们都是用Java语言编写的,由BootstrapClassLoader加载;其中Extension ClassLoader负责加载扩展的Javaclass(例如所有javax.*开头的类和存放在JRE的ext目录下的类),ApplicationClassLoader负责加载应用程序自身的类。
当运行一个程序的时候,JVM启动,运行bootstrapclassloader,该ClassLoader加载java核心API(ExtClassLoader和AppClassLoader也在此时被加载),然后调用ExtClassLoader加载扩展API,最后AppClassLoader加载CLASSPATH目录下定义的Class,这就是一个程序最基本的加载流程。
jvm classLoader architecture :
a, Bootstrap ClassLoader/启动类加载器
主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作.
b, Extension ClassLoader/扩展类加载器
主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作
c, System ClassLoader/系统类加载器
主要负责java -classpath/-Djava.class.path所指的目录下的类与jar包装入工作.
b, User Custom ClassLoader/用户自定义类加载器(java.lang.ClassLoader的子类)
在程序运行期间, 通过java.lang.ClassLoader的子类动态加载class文件, 体现java动态实时类装入特性.
类加载器的特性:
1, 每个ClassLoader都维护了一份自己的名称空间, 同一个名称空间里不能出现两个同名的类。
2, 为了实现java安全沙箱模型顶层的类加载器安全机制, java默认采用了 ” 双亲委派的加载链 ” 结构.
ClassLoader的问题
Thread.currentThread().getContextClassLoader()指的是取得当前线程的ClassLoader,而Class.forName()其实也是使用当前线程的ClassLoader装入一个类
注:
1. 参考了百度百科
2. 学习资料
深入理解Java虚拟机:JVM高级特性与最佳实践
分享到:
相关推荐
Java ClassLoader学习总结 Java 类加载机制是 Java 中一个非常重要的机制,它负责加载 Class 文件到 JVM,以供程序使用。ClassLoader 是 Java 中的一个抽象类,它的主要作用是加载 Class 文件到 JVM 中。...
理解ClassLoader的工作原理以及如何定制它,对于深入学习Java的运行机制和进行高级应用开发具有重要意义。本篇文章将深入探讨Java ClassLoader的内部工作,并通过一个具体的实例来展示如何定制自己的ClassLoader。 ...
Java ClassLoader是一个核心的Java运行时组件,负责加载类到Java虚拟机(JVM)中。它是Java平台的独特特性,因为它允许动态加载类,增强了软件的可扩展性和灵活性。这篇博文(虽然链接不可用)可能深入探讨了...
通过本教程的学习,你将能够理解Java ClassLoader的基本概念及其工作原理,并学会如何创建自定义的ClassLoader。自定义ClassLoader不仅能够扩展JVM的功能,还能够在实际项目中解决特定问题,如动态加载远程资源、...
* 学习如何将自定义类加载器集成到Java应用中。 * 修改类加载器以适应Java 2版本。 为了更好地理解本教程,你需要具备以下基础: * 基本的Java编程能力,包括能够创建、编译和执行简单的命令行Java程序。 * 对类...
开源项目"classloader-playground"为我们提供了一个学习和实验Java类加载器的绝佳平台。 首先,我们来理解一下什么是类加载器。在Java中,类加载的过程包括加载、验证、准备、解析和初始化五个阶段。类加载器主要...
理解ClassLoader的工作原理对于深入学习Java以及进行JVM优化、插件开发等高级技术至关重要。下面将详细介绍Java ClassLoader的基本概念、工作流程、类加载机制以及自定义ClassLoader。 1. **ClassLoader基本概念** ...
4. 考虑Java 2版本的兼容性:学习如何修改你的ClassLoader以适应Java 2及以上版本的特性,比如支持Service Provider Interface (SPI)。 在深入学习之前,你需要理解类的生命周期,以及类加载、链接和初始化的概念。...
在Java编程语言中,ClassLoader是核心组件之一,它负责加载类到JVM(Java虚拟机)中。理解ClassLoader的工作机制以及类变量初始化的顺序对于深入理解Java运行时环境至关重要。这篇博文将探讨这两个主题。 首先,让...
Java虚拟机(JVM)是Java程序运行的基础,它通过加载、验证、解析和执行字节码来实现程序的运行。在JVM中,类加载器(ClassLoader)扮演着至关重要的...通过实践和学习,我们能够提升Java编程的技能和解决问题的能力。
JAVA 后端学习课程总结 JAVA 是一种广泛使用的编程语言,广泛应用于 Android 应用程序开发、Web 应用程序开发、桌面应用程序开发等领域。JAVA 后端开发是指使用 JAVA 语言开发服务器端应用程序,例如 Web 服务、...
通过本文的学习,我们不仅深入了解了Java类加载器的工作原理,还通过具体的自定义类加载器实例掌握了如何在实践中应用这些理论知识。类加载器在Java开发中扮演着极其重要的角色,尤其是在需要实现动态加载类的应用...
理解类加载器的工作原理对于深入学习Java编程至关重要。在Java中,类加载器按照层次结构进行组织,包括引导类加载器、扩展类加载器和应用程序类加载器,每个都有特定的职责。 1. **引导类加载器(Bootstrap ...
总的来说,这个案例提供了学习和实践Java ClassLoader、反射和注解的绝佳机会。通过这个案例,你可以了解到如何构建一个能够动态加载和更新类的系统,这对于理解和掌握Java的高级特性是非常有帮助的。在实际项目中,...
- **CLASSPATH**:这是指Java运行环境(JRE)中的类加载器(ClassLoader)加载类文件的路径。要深入理解这一概念,就需要明白JRE中的类加载器是如何加载类文件的。这对于避免类找不到或加载错误等问题至关重要。 - *...
《ClassLoader详解》 Java应用程序的运行离不开类的加载,而ClassLoader正是这个过程的...通过本文档的学习,读者可以深入理解Java虚拟机加载类的过程,掌握如何自定义和优化类加载机制,从而提升应用的稳定性和效率。
Java中ClassLoader类加载学习总结 ClassLoader类加载是Java语言的一种创新,目的是为了将类的加载过程与虚拟机解耦,达到”通过类的全限定名来获取描述此类的二进制字节流“的目的。类加载器的基本模型就是双亲委派...
在Java世界中,JVM(Java Virtual ...深入学习ClassLoader不仅有助于提升编程技巧,也有助于解决实际开发中遇到的类加载问题。阅读"ClassLoader简析.pdf"文档和分析"Sample.zip"中的代码,将有助于形成更全面的了解。
《深入Java虚拟机(七)深入源码看...深入学习ClassLoader不仅可以提高编程能力,也有助于解决实际开发中遇到的复杂问题。通过阅读源码,我们可以更深入地了解ClassLoader的工作机制,从而更好地利用Java平台的特性。