一、什么是 类加载器(ClassLoader)?
类加载器(ClassLoader),用来加载 Java字节码(.class)到 Java虚拟机(JVM)中。
它使得 Java 类可以被动态加载到 Java虚拟机中并执行 。
为了完成加载类的这个职责,java.lang.ClassLoader类的基本职责 就是根据一个指定的 类名称,找到或者生成 其对应的字节代码,然后从这些 字节代码 中定义出一个 Java 类,即 java.lang.Class类的一个实例。除此之外,ClassLoader还负责加载 Java应用所需的资源,如图像文件和配置文件等。
二、类加载器的 树状组织结构 :
Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由 Java 应用开发人员编写的。
系统提供的类加载器主要有下面三个:
启动类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自 java.lang.ClassLoader。
扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。
系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过 ClassLoader.getSystemClassLoader() 来获取它。
3个加载器,为父子关系 :
BootStrap ---->JRE/lib/rt.jar (System等)
ExtClassLoader ---->JRE/lib/ext/*.jar
AppClassLoader---->CLASSPATH指定所有jar或目录
除了系统提供的类加载器以外,开发人员可以通过继承 java.lang.ClassLoader 类的方式实现自己的类加载器,以满足一些特殊的需求。
除了启动类加载器之外,所有的类加载器都有一个父类加载器。
对于系统提供的类加载器来说,系统类加载器的父类加载器是扩展类加载器,而扩展类加载器的父类加载器是启动类加载器;对于开发人员编写的类加载器来说,其父类加载器是加载此类加载器 Java 类的类加载器。因为类加载器 Java 类如同其它的 Java 类一样,也是要由类加载器来加载的。一般来说,开发人员编写的类加载器的父类加载器是系统类加载器。类加载器通过这种方式组织起来,形成树状结构。树的根节点就是启动类加载器。
1.启动(bootstrap)类加载器
系统唯一的,是Java虚拟机实现的一部分。
2.用户自定义 类加载器
Java应用程序能够在运行时安装用户定义的类加载器,
这种类加载器能够使用自定义的方式加载类。
每一个类在加载时,Java虚拟机都会监视这个类。当被加载的类引用另一个类时,虚拟机会使用
加载第一个类的 类加载器 加载被引用的所有类。
由于上述这种方式,所以被加载的类默认情况下只能看到被同一个类加载器加载的别的类。
所以,Java的体系结构允许在一个Java应用程序中,建立多个 命名空间。
运行时的Java程序中的每一个类加载器都有它自己的命名空间。
三、ClassLoader具有以下常用方法:
四、在java中,类加载器把一个类载入JVM,经过以下步骤:
1、装载:查找和导入class文件
2、链接:其中解析步骤是可以选择的
(a)检查:检查载入的class文件数据的正确性
(b)准备:给类的静态变量分配存储空间
(c)解析:将符号引用转成直接引用
3、初始化:对静态变量,静态代码块执行初始化工作
五、父类委托机制
每当 类加载器 加载类时,都会先委托给其父类加载,当所有 祖宗类加载器 没有加载到此类时,
再回到 发起者类加载器,如果 发起者类加载器 也无法加载此类,则会抛出ClassNotFoundException。
相关推荐
ClassLoader的API使用和自定义
ClassLoader类加载器讲解,理解JAVA类加载机制
类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java ...
java源码源码类加载器泄漏预防库 如果您想避免可怕的java.lang.OutOfMemoryError: Metaspace / PermGen space ,只需将此库包含到您的 Java EE 应用程序中,它就会处理剩下的事情! 要了解有关类加载器泄漏、其原因...
java应用程序类加载器(ClassLoader for java Application),类似exe4j, 方便启动java程序, 配置灵活,支持多平台选择性配置
【图解版】深入分析ClassLoader类加载工作机制,从原理到JVM的装载过程,详情分析了ClassLoader加载类以及自定义类加载器的过程,不可用于商业用途,如有版权问题,请联系删除!
如果户创建的JAR放在此录下,也会动由扩展类加载器加载.应程序类加载器(系统类加载器,Application ClassLoader)java语编写,由sun.
下面小编就为大家带来一篇classloader类加载器_基于java类的加载方式详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java ...
jvm运行的过程中,需要载入类,而类的加载需要类加载器,本文章提供了java的类加载器的工作原理。可以使读者更加理解jvm的运行机制。
Java的类加载机制:加载,连接,初始化。JAVA类加载器: Bootstrap ClassLoader : 根类加载器, Extension ClassLoader: 扩展类加载器, System ClassLoader : 系统类加载器, Java反射
gs-classloader-inspector 使用 JMX 浏览千兆空间类加载器 启用将 -javaagent:ClassloaderAgent.jar 添加到 JVM 参数识别 Gigaspaces 类加载器并显示附加信息
关于类加载器的 上课ppt -java虚拟机自带的加载器 根类加载器(Bootstrap) c++写的看不到扩展类加载器(extension) 系统类加载器(System) AppClassLoad 用户自定义的类加载器 Java.lang.ClassLoader的子类
类加载器是Java最强大的特征之一。但是开发者常常忘记类加载组件。类加载器是在运行时负责寻找和加载类文件的类。Java允许使用不同的类加载器,甚至自定义的类加载器。类加载器从源文件(通常是.class 或 .jar文件)...
3-7Tomcat中自定义类加载器的使用与源码实现(1).mp4
简单的自定义类加载器问候世界hello word,基于磁盘的ClassLoader
索引类加载器一个自定义的 JVM 类加载器,它为类路径元素编制索引,以便更快地定位类/资源。 构建: ./make-jar.sh 要使用,将indexed-classpath.jar添加到类路径并设置-Djava.system.class.loader=org.pantsbuild....
ClassLoader 三种类加载方式 Boostrap Extenxsion 以及Application ClassLoad分别适用的场景
JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。 SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。
类加载器分为根加载器(bootstrap classloader)、扩展类加载器(ext classloader)、系统类加载器(system classloader)、自定义类加载器(通常继承java.net.URLClassLoader,重写findClass()),它们的关系通常...