双亲委派机制存在的意义 双亲委派只是一种说法,个人觉得叫单亲委派更合适,因为向上传递的父类只有一个,估计只是翻译过来的,形成的一种习惯,大家可以当做单亲委派 四种加载器都是用于类的加载,只是加载的对象不一样 bootstrap ClassLoader -负责核心JRE的类库加载,如rt.jar, charsets.jar等 Extension ClassLoader -负责加载拓展目录ext中的jar类包 Application ClassLoader -负责加载ClassPath路径下的类包…
所谓的类加载器(Class Loader)就是加载Java类到Java虚拟机中的,前面<面试官,不要再问我"Java虚拟机类加载机制"了>中已经介绍了具体加载class文件的机制.本篇文章我们重点介绍加载器和双亲委派机制. 类加载器 在JVM中有三类ClassLoader构成:启动类(或根类)加载器(Bootstrap ClassLoader).扩展类加载器(ExtClassLoader).应用类加载器(AppClassLoader).不同的类加载器负责不同区域的类的加载.…
预定义类加载器和双亲委派机制 JVM预定义的三种类型类加载器: 启动(Bootstrap)类加载器:是用本地代码实现的类装入器,它负责将 <Java_Runtime_Home>/lib下面的类库加载到内存中(比如rt.jar).由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作. 标准扩展(Extension)类加载器:是由 Sun 的 ExtClassLoader(sun.misc.Launcher$ExtClassLoader)…
前言:最近两个月公司实行了996上班制,加上了熬了两个通宵上线,状态很不好,头疼.牙疼,一直没有时间和精力写博客,也害怕在这样的状态下写出来的东西出错.为了不让自己荒废学习的劲头和习惯,今天周日,也打算写一篇博客,就算是为了给自己以前立的flag(每个月必须写几篇博客)的实现.那么本次博客的主题我选择了java的类加载过程的探究以及双亲委派机制模型以及它被破坏的场景,搞清楚这个对于我们理解java的类加载过程以及面试中都是很有必要的. 本篇博客的目录 一:类加载器 二:类加载的过程和阶段 三:双…
2. 双亲委派机制 2.1 双亲委派机制工作原理 2.1.1 原理 Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存,生成class对象. 加载某个类的class文件时,Java虚拟机采用的是双亲委派模式,即把请求交由父类处理,它是一种任务委派模式. 2.1.2 举例说明 自定义一个java.lang.String,然后在另外的类中调用String类,会发现只打印了"hello",没有打印"我是自定义加载类&qu…
@ 目录 前言 类的生命周期 加载 验证 准备 解析 初始化 案例一 案例二 案例三 案例四 类加载器 类加载器和双亲委派模型 破坏双亲委派模型 第一次 SPI Tomcat OSGI 总结 前言 前面学习了虚拟机的内存结构.对象的分配和创建,但对象所对应的类是怎么加载到虚拟机中来的呢?加载过程中需要做些什么?什么是双亲委派机制以及为什么要打破双亲委派机制? 类的生命周期 类的生命周期包含了如上的7个阶段,其中验证.准备.解析统称为连接 ,类的加载主要是前五个阶段,每个阶段基本上保持如上顺序开始…
类加载器 加载类的开放性 类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因.在类加载的第一阶段"加载"过程中,需要通过一个类的全限定名来获取定义此类的二进制字节流,完成这个动作的代码块就是类加载器.这一动作是放在Java虚拟机外部去实现的,以便让应用程序自己决定如何获取所需的类. 虚拟机规范并没有指明二进制字节流要从一个Class文件获取,或者说根本没有指明从哪里获取.怎样获取.这种开放使得Java在很多领域得到充分运用,例如: 从ZIP包中读…
1.双亲委派机制及作用 1.1 什么是双亲委派机制 当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类. 1.2 类加载器的类别 BootstrapClassLoader(启动类加载器) c++编写,加载java核心库 java.*,构造ExtClassLoader和AppClassLoader.由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用…
在上文中,已经介绍了系统类加载器以及类加载器的相关机制,还自定制类加载器的方式.接下来就以tomcat6为例看看tomat是如何使用自定制类加载器的.(本介绍是基于tomcat6.0.41,不同版本可能存在差异!) 网上所描述的tomcat类加载器 在网上搜一下“tomcat类加载器”会发现有大量的文章,在此我偷个懒,^_^把网上对tomcat类加载器的描述重说一下吧. CommonClassLoader:加载的类目录通过{tomcat}/conf/catalina.properties中的co…
系统类加载器 系统类加载器可能都耳详能熟,但是为了完整点,还是先简单的说说系统的类加载器吧. public class Test { public static void main(String[] args) { ClassLoader cl1 = Test.class.getClassLoader().getParent().getParent(); System.out.println(cl1); ClassLoader cl2 = Test.class.getClassLoader().…