Java的双亲委派机制
Java的双亲委派机制是java中类加载过程采用的机制,所以首先要理解java的类加载过程。
类加载过程:程序经过javac.exe命令以后,会生成一个或多个class字节码文件,接着使用java.exe命令对某个class字节码进行解释运行时,相当于将这个class字节码加载到内存中,此过程就是类加载过程。
那么以上所说的类加载过程,就需要类加载器来完成啦。
java中类加载的过程采用双亲委派机制,加载一个类先由应用类加载器委托给扩展类加载器,再由扩展类加载器委托给启动类加载器,如果启动类加载器加载不了的话,则由扩展类加载器加载,如果扩展类加载器也加载不了的话,则由应用类加载器加载,如果连应用类加载器都找不到的话,则报ClassNotFound的异常。
源码:
protected Class loadClass(String name, boolean resolve)throws ClassNotFoundException{synchronized (getClassLoadingLock(name)) {// 首先检查这个classsh是否已经加载过了Class c = findLoadedClass(name);if (c == null) {long t0 = System.nanoTime();try {// c==null表示没有加载,如果有父类的加载器则让父类加载器加载if (parent != null) {c = parent.loadClass(name, false);} else {//如果父类的加载器为空 则说明递归到bootStrapClassloader了//bootStrapClassloader比较特殊无法通过get获取c = findBootstrapClassOrNull(name);}} catch (ClassNotFoundException e) {}if (c == null) {//如果bootstrapClassLoader 仍然没有加载过,则递归回来,尝试自己去加载classlong t1 = System.nanoTime();c = findClass(name);sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);sun.misc.PerfCounter.getFindClasses().increment();}}if (resolve) {resolveClass(c);}return c;}}
图片取自网络。
双亲委派机制的优点:
避免类的重复加载,保证只加载一次就够了。
提高了安全性,如果有人想要篡改String类的话,类加载器优先使用启动类加载器加载,发现已经加载过了,所以不会加载你自己写的String类(如果没有双亲委派机制的话,直接可以使用自定义类加载器了,就很不安全)。
补充:
加载到内存中的类叫做运行时类,一个运行时类就是一个Class实例。
启动类加载器:是用来加载jdk\jre\lib下的核心类库,比如rt.jar、resources.jar等。
扩展类加载器:是用来加载jdk\jre\lib\ext下的扩展类库中的jar包和.class文件。
应用类加载器:用来加载classpath下的jar包和.class文件。
Java的双亲委派机制相关推荐
- 关于Java类加载双亲委派机制的思考(附面试题)
转载自 关于Java类加载双亲委派机制的思考(附面试题) 预定义类加载器和双亲委派机制 JVM预定义的三种类型类加载器: 启动(Bootstrap)类加载器:是用本地代码实现的类装入器,它负责将 &l ...
- java类加载机制为什么双亲委派_[五]类加载机制双亲委派机制 底层代码实现原理 源码分析 java类加载双亲委派机制是如何实现的...
Launcher启动类 本文是双亲委派机制的源码分析部分,类加载机制中的双亲委派模型对于jvm的稳定运行是非常重要的不过源码其实比较简单,接下来简单介绍一下我们先从启动类说起有一个Launcher类 ...
- Java虚拟机-双亲委派机制
文章目录 双亲委派机制概述 双亲委派机制原理 双亲委派机制的优势 沙箱安全机制 破坏双亲委派机制 双亲委派机制概述 Java虚拟机对class文件采用按需加载的方式,也就是说当需要使用该类时,才会将它 ...
- Java虚拟机 - 双亲委派机制
文章目录 一.原理 二.作用 三.沙箱安全机制 四.补充内容 Java虚拟机对class文件采用的是 按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象.而且 ...
- Java打破双亲委派机制
1.自定义加载器 沿用双亲委派机制自定义类加载器很简单,只需继承ClassLoader类并重写findClass方法即可. ①先定义一个待加载的类Test,它很简单,只是在构建函数中输出由哪个类加载器 ...
- 「 JVM基础 」Java双亲委派机制
Java的双亲委派机制 参考&鸣谢 Dream_ling. weixin_39610188. JVM底层原理解析 文章目录 Java的双亲委派机制 一.介绍 二.什么是双亲委派机制 三.双亲委 ...
- JAVA 双亲委派机制
最近突然看到了关于Java的双亲委派机制,作为一个搞Java的程序猿还是应该知道是怎么回事. 我用一个程序来简单说明是怎么回事吧 package java.util;/*** 本类中的main方法不会 ...
- Java双亲委派机制在Android的应用
Java的双亲委派机制 三层类加载器 1.启动类加载器(Bootstrap Class Loader) 这个类加载器负责加载存放在<JAVA_HOME>\lib目录,或者被-Xbootcl ...
- 简单的Java双亲委派机制
双亲委派机制 Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象,而且加载某个类的class文件时,Java虚拟机采用的 ...
最新文章
- 产品经理刷题2020.09.20
- 关于团队建设,穆帅能教我们什么?
- Luogu P5652 基础博弈练习题 (博弈论、图论)
- java 怎么比较两个日期_如何在Java中比较两个日期?
- 光端机和收发器的区别有哪些?
- Spread基本知识(一)
- 1222-周一开盘红红火火大涨的一天。EG,PVC,沪铜,国际铜,纯碱涨停
- 如何将pdf生成二维码链接?
- 黑马程序员最新Python教程——第一阶段(1)
- 我有DIY一Android遥控-所有开源
- Python实现箱形图的绘制
- 教你如何关闭Surface Go的触摸键盘?
- ARM linux解析之压缩内核zImage的启动过程
- 杂记-2018.04.09
- 使用Docker部署Spring-Boot-项目,带劲!
- 苹果原装转接头不能连html,变革之际 iPhone 7P原装lightning耳机及转接头拆解
- python建立数据库连接时出错_python连接数据库
- java abcd_Java的一个小题目,字母abcd 对应1234类推,输入单词得到对应的数字和...
- 华为腾讯汉能:叫响世界的三大中国自主创新企业
- LeetCode DP基础
热门文章
- mysql xf0x9fx8ex88_关于twitter:字符串值不正确:’e???e?…’MySQL
- matplotlib隐藏刻度线、标签和边线
- 智能网联汽车产业风口下,长沙如何翻江涌潮?
- springcloud-gateway集成knife4j(swagger2)
- 基于JAVA印染公司信息管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
- 降薪求职,看的是未来
- 密信(MeSince)的诞生,全自动加密信息已来临!
- php盒子模型,HTML与CSS的盒子模型
- centos7下载setoolkit并克隆网站(fishing网站)
- 如何选购自己满意的主板(建议观看)