启动类加载器可以抢在标准扩展类加载器之前去装载类,而标准扩展类装载器可以抢在类路径加载器之前去加载那个类,类路径装载器又可以抢在自定义类装载器之前去加载类。所以Java虚拟机先从最可信的Java核心API查找类型,这是为了防止不可信的类扮演被信任的类
加载顺序:启动类加载器  标准扩展类加载器  类路径加载器 自定义类装载器
假设网络中有一个名为java.lang.Integer的类,他是黑客在为了混进java.lang包所起的名字,实际上里面还有恶意代码,但是这种伎俩在双亲模式加载体系结构下是行不通的,因为网络加载器在加载他的时候,首先调用双亲的加载器,这样一直委托上去,直到启动类加载器,而启动类加载器在核心Java API发现这个名字的类,所以他就只加载Java核心API的java.lang.Integer类,然后将这个类返回,所以自始至终网络上的java.lang.Integer是不会被加载的。
但是如果这个移动代码不是试图去替换一个被信任的类,而是想在一个被信任的包中插入一个全新的类型,情况会怎么样呢?比如一个名为java.lang.Virus的类,经过双亲委托模式,最终类装载器会让网络类加载器加载这个类,因为网络类加载器的双亲都没有这个类。假设成功的加载这个类,你肯定在想Virus和Integer都在java.lang包下面,暗示这个类是Java API的一部分,那么不是也有修改Java.lang包中数据的权限呢?答案当然不是,因为要取得访问和修改java.lang包中的权限,java.lang.Virus和java.lang下的其他类必须是属于同一个运行时包的。运行时包是指由同一个类装载器装载的、属于同一个包的、多个类型的集合。java.lang.Virus和java.lang下的其他类不是同一个类装载器装载的。

Java类加载双亲委托模式优点的更多相关文章

  1. classloader加载的双亲委托模式

    要深入了解ClassLoader,首先就要知道ClassLoader是用来干什么的,顾名思义,它就是用来加载Class文件到JVM,以供程序使用 的.我们知道,java程序可以动态加载类定义,而这个动 ...

  2. jdbc 加载数据库驱动如何破坏双亲委托模式

    导读      通过jdbc链接数据库,是每个学习Java web 方向的人必然一开始会写的代码,虽然现在各路框架都帮大家封装好了jdbc,但是研究一下jdbc链接的套路还是很意义     术语以及相 ...

  3. jvm (一)jvm结构 & 类加载 & 双亲委托模型

    参考文档: jvm内幕-java虚拟机详解:http://www.importnew.com/17770.html 常量池:https://www.jianshu.com/p/c7f47de2ee80 ...

  4. 关于Java类加载双亲委派机制的思考(附一道面试题)

    预定义类加载器和双亲委派机制 JVM预定义的三种类型类加载器: 启动(Bootstrap)类加载器:是用本地代码实现的类装入器,它负责将 <Java_Runtime_Home>/lib下面 ...

  5. [五]类加载机制双亲委派机制 底层代码实现原理 源码分析 java类加载双亲委派机制是如何实现的

      Launcher启动类 本文是双亲委派机制的源码分析部分,类加载机制中的双亲委派模型对于jvm的稳定运行是非常重要的 不过源码其实比较简单,接下来简单介绍一下   我们先从启动类说起 有一个Lau ...

  6. Java 类加载机制 ClassLoader Class.forName 内存管理 垃圾回收GC

    [转载] :http://my.oschina.net/rouchongzi/blog/171046 Java之类加载机制 类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指 ...

  7. Java 类加载机制详解

    一.类加载器 类加载器(ClassLoader),顾名思义,即加载类的东西.在我们使用一个类之前,JVM需要先将该类的字节码文件(.class文件)从磁盘.网络或其他来源加载到内存中,并对字节码进行解 ...

  8. 深入理解Java类加载器(ClassLoader) (转)

    转自: http://blog.csdn.net/javazejian/article/details/73413292 关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Ja ...

  9. Java类加载器ClassLoader总结

    JAVA类装载方式,有两种: 1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中. 2.显式装载, 通过class.forname()等方法,显 ...

随机推荐

  1. 做错的题目——给Array附加属性

  2. JS with

    <script type="text/javascript"> function Dog(){ this.type="dog"; this.tail ...

  3. 表格模型的监听 TableModelListener

    当表格内容发生改变,监听做了哪些操作,需要表格模型的监听 TableModelListener来实现. 以上一个随笔内容<高级组件——表格模型TableModel>为例,增加监听事件内容. ...

  4. maomao的现在与未来

    今晚开始,maomao决定要成为一个和以前不一样的人了. 自从高一开始竞赛生涯以来,我的竞赛就一直处于不是很好,也不是很差的水平,就像我初中一年级到二年级一直处于的状态一样.一直以来,我从来没有对自己 ...

  5. (分治法 快速幂)P1226 【模板】快速幂||取余运算 洛谷

    题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 输入格式: 三个整数b,p,k. 输出格式: 输出“b^p mod k=s” s为运算结果 输入输 ...

  6. 8.Django

    ##update 操作更新数据

  7. 关于MyBase 7.0 破解的方法

    Mybase 是一个功能强劲且可随心所欲自定义格式及层次关系的通用资料管理软件, 可用于管理各种各样的信息,如一:各类文档.文件.资料.名片.事件.日记.项目.笔记.下载的精华.收集的各种资料等等,即 ...

  8. qt: qt install framework使用问题;

    qt提供了qt install framework用于程序打包,方便.快捷,并且可以对界面和功能进行自定义. 但是, 如果使用默认的打包配置,不进行安装页面功能自定义的话, 在修改安装路径时,在对程序 ...

  9. ELK 安装与基本配置(一)

    对于日志来说,最常见的需求就是收集.存储.查询.展示,开源社区正好有相对应的开源项目:logstash(收集).elasticsearch(存储+搜索).kibana(展示),我们将这三个组合起来的技 ...

  10. Numpy 笔记: 多维数组的切片(slicing)和索引(indexing)【转】

    目录 切片(slicing)操作 索引(indexing) 操作 最简单的情况 获取多个元素 切片和索引的同异 切片(slicing)操作 Numpy 中多维数组的切片操作与 Python 中 lis ...