· 双亲委派机制、沙箱安全机制是JVM中类加载器系统的相关术语
· 在这之前,应该先了解JVM类加载器系统的相关概念

一、类加载器基础知识

见下图1,java文件首先会被编译成class文件,class文件作为Java虚拟机的可识别文件,编译完成后,需要加载到内存。
    我们针对不同的class文件,会相应用到不同的类加载器。

· 引导类加载器Bootstrap ClassLoader,也叫做启动类加载器/根类加载器,并不继承ClassLoader类。引导类加载器使用C/C++语言实现,在Java创立初期,C/C++在速度上占据优势,所以引导类加载器嵌套在JVM内部,用来加载Java核心类库,为Java加速。

· 扩展类加载器Extension ClassLoader,继承了ClassLoader类。上层类加载器为引导类加载器。负责加载JRE的扩展目录,从java.ext.dirs系统属性所指定的目录中加载类库,或从JDK系统安装目录的jre/lib/ext子目录(扩展目录)下加载类库。如果用户创建的jar放在此目录下,也会自动由扩展类加载器加载。

· 系统类加载器Application ClassLoader,也叫做应用程序类加载器,继承了ClassLoader类。系统类加载器主要加载日常开发中开发者自己编写的类。

· 自定义类加载器(狭义)User-Defined ClassLoader,继承了ClassLoader类。狭义上的自定义类加载器,是开发人员自定义的一类加载器。但是从广义上来说,官方在Java虚拟机中规定将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器。
    所以说(参考上图1),扩展类加载器、系统类加载器、自定义类加载器(狭义)都算作自定义类加载器。

注意,各个加载器是没有继承关系的,途中的箭头只是逻辑上的一种理解。


二、双亲委派机制

核心解释:
    如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上,因此,所有的类加载请求最终都应该被传递到顶层的启动类加载器中,只有当父加载器在它的搜索范围中没有找到所需的类时,即无法完成该加载,子加载器才会尝试自己去加载该类。

举个例子:
    假设我们在项目工程中写一个类叫做java.lang.Integer,此类在加载的时候,由于是我们自己写的,它对应的类加载器是系统类加载器,然后由于双亲委派机制,向上沿此路线传递:系统类加载器 --> 拓展类加载器 --> 启动类加载器,到了启动类加载器的时候,加载了核心类库中的java.lang.Integer。这样就防止了核心类被篡改,也可以防止类被重复加载。

得出双亲委派机制的优点:
    由上例:
    1、安全,可避免用户自己编写的类动态替换Java的核心类,如java.lang.String。,java核心api中定义类型不会被随意替换,假设通过网络传递一个名为java.lang.Integer的类,通过双亲委托模式传递到启动类加载器,而启动类加载器在核心Java API发现这个名字的类,发现该类已被加载,并不会重新加载网络传递的过来的java.lang.Integer,而直接返回已加载过的Integer.class,这样便可以防止核心API库被随意篡改。

2、避免全限定命名的类重复加载(使用了findLoadClass()判断当前类是否已加载)。Java类随着它的类加载器一起具备了一种带有优先级的层次关系,通过这种层级关可以避免类的重复加载,当父亲已经加载了该类时,就没有必要子ClassLoader再加载一次


三、沙箱安全机制

核心解释:
    主要用来防止恶意代码污染java源代码。
    自定义String类,但是在加载自定义String类的时候会率先使用引导类加载器加载,而引导类加载器在加载的过程中会先加载jdk自带的文件(rt.jar包中java\lang\String.class),报错信息说没有main方法就是因为加载的是rt.jar包中的String类。这样可以保证对java核心源代码的保护,这就是沙箱安全机制

【JVM】类加载器:双亲委派机制、沙箱安全机制相关推荐

  1. java类加载器、双亲委派、沙箱安全机制全都让你整明白(三万字,收藏慢慢啃)

    目录 一.概述 1.类加载的分类 2.类加载器的必要性 3.命名空间 4.类加载机制的基本特征 二.类加载器的分类 1.引导类加载器 2.扩展类加载器 3.系统类加载器 4.用户自定义类加载器 三.测 ...

  2. JVM-白话聊一聊JVM类加载和双亲委派机制源码解析

    文章目录 Java 执行代码的大致流程 类加载loadClass的步骤 类加载器和双亲委派机制 sun.misc.Launcher源码解析 Launcher实例化 Launcher 构造函数 双亲委派 ...

  3. 类加载器-双亲委派机制

    上一篇:类加载器-分类 一.概述 除了根类加载器之外,其他的类加载器都需要有自己的父加载器.从JDK1.2开始,类的加载过程采用双亲委派机制,这种机制能够很好的保护java程序的安全.除了虚拟机自带的 ...

  4. 由源码深入Java类加载器(双亲委派模型)

    JVM类加载器 JVM主要有以下几种类加载器: 引导类加载器 主要加载JVM运行核心类库,位于JRE的lib目录下,如rt.jar中的类. 扩展类加载器 主要加载JVM中扩展类,位于JRE的ext目录 ...

  5. 类加载器双亲委派模式

    双亲委派模型的工作流程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上,因此,所有的类加载请求最终都应该被传递到顶层的启动类加载器中,只 ...

  6. 类加载器-双亲委派-源码分析1

    双亲委派模式 所谓的双亲委派,就是指调用类加载器的 loadClass 方法时,查找类的规则 注意 protected Class<?> loadClass(String name, bo ...

  7. 类加载器-双亲委派-源码分析2

    public class Load5_3 {public static void main(String[] args) throws ClassNotFoundException {Class< ...

  8. JVM—类加载器和双亲委派模型

    关注微信公众号:CodingTechWork,一起工作学习总结. 文章目录 引言 类加载器 类与类加载器关系 类加载器分类 启动类加载器 扩展类加载器 应用程序类加载器 双亲委派模型 介绍 工作流程 ...

  9. JVM 类加载器详解

    类加载器作用: 类加载器子系统作用: 1. 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识. 2. ClassLoader只负责class文件的加载 ...

  10. JVM(3)——JVM类加载器

    一.类加载器简介 虚拟机设计团队把类加载阶段中的"通过一个类的全限定名来获取描述此类的二进制字节流"这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类 ...

最新文章

  1. 百度投资创维10亿,联手构建智能家居AI生态
  2. R语言sys方法:sys.getpid函数获取R会话的进程ID、sys.glob函数和file.path函数匹配文件夹下的所有特定类型文件、sys.info函数获取系统和用户信息
  3. oracle 实现HA,oracle RAC的客户端HA配置
  4. 字符串系列之最长回文子串
  5. [翻译] AFDropdownNotification
  6. 解决C# Repeater内嵌Repeater 数据绑定,以及第二次层Repeater的ItemDataBound事件怎么处理...
  7. 根据进程名判断该进程是否存在(C++)
  8. 2019.1.31及以前
  9. 毕设日志——linux服务器anaconda下安装caffe
  10. node+读写文件_python高级:2.文件读写part2
  11. getconnectiontimeoutexception 网络问题排查_家里wifi信号差?给小白的无线排查操作指南...
  12. SAP ABAP SD常用数据库表
  13. Linux:configure: error: OpenSSL libcrypto not found
  14. emoji语言抽象话大全_当抽象话也成为一种暗语
  15. Python采集 11月最新 世界疫情数据 + 可视化动态地图,实时查询超稳定
  16. 多肽细胞穿膜肽TAT修饰牛血清白蛋白BSA/人血清白蛋白HSA/卵清白蛋白OVA纳米粒(实验要求)
  17. 技校计算机可以学平面设计吗,上技校可以学平面设计吗 去技校学平面设计还是自己在家自学好 - 兔课网...
  18. 血脂测试软件,血脂检测,最全解读!
  19. python中mysqldb的用法
  20. c语言 库函数理解,C语言库函数理解

热门文章

  1. 点云配准求物体的6D姿态(转)
  2. java基于servlet的文件上传
  3. JMC | 药物发现中的迁移学习
  4. 中科院微生物所王军课题组建立靶向RNA的病原检测新方法mtNGS和mtTGS
  5. NAR:宏基因组网络分析工具MetagenoNets
  6. QIIME 2用户文档. 17鉴定和过滤嵌合体序列q2-vsearch(2019.7)
  7. QIIME 2用户文档. 9数据导入Importing data(2019.7)
  8. Genome Biology:人体各部位微生物组时间序列分析
  9. vue 动态修改后端请求_vue-element-admin实战 | 第二篇: 最小改动接入后台实现根据权限动态加载菜单...
  10. R语言配对图可视化:pivot_longer函数将宽格式的数据重塑为长格式并进行数据全连接和左连接(left join)、配对图可视化(根据分类变量的值为散点图上的数据点添加颜色)