文章目录

  • 双亲委派机制
    • 工作原理
    • 工作场景
    • 调用过程
      • 三种加载器调用范围
      • String类加载过程
      • StringTest类加载过程
    • 双亲委派机制优点

双亲委派机制

Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象。而且加载某个类的class文件时,Java虚拟机采用的是双亲委派模式,即把请求交由父类处理,它是一种任务委派模式。

工作原理

1)如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行;

2)如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归请求最终将到达顶层的启动类加载器

3)如果父类加载器可以完 成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式

工作场景

手动新建一个类String并将其包名改为java.lang,请问我们新建一个String对象时会调用自定义类吗

按照安全性而言是不应该调用的,否则我们往一个做好的系统里面声明这样一个类就会毁坏整个系统,而事实上java也确实不会调用这个类,所我们在这里新建一个测试类StringTest并新建一个String对象看看自定义的String类会不会输出自定义String类中的静态语句

调用过程

String类加载与StringTerst类加载过程是不同的,因为String类的位置处在java.lang(jdk定义的)文件下,所以由引导类加载器处理,当引导类加载器处理后就不会给系统类加载器处理了,所以也不会调用我们自定义的类;

而StringTerst类由系统类加载器处理

三种加载器调用范围

String类加载过程

StringTest类加载过程

所以执行我们自定义String类中的main方法时会报错,因为由引用类加载器加载出来的String类中是没有关于main方法的定义的

双亲委派机制优点

避免类的重复加载

保护程序安全,防止核心API被随意篡改

自定义类:java. lang.string(已存在)

自定义类:java.lang.shkstart(报错,不允许在java.lang中新加自定义的类)

java虚拟机中的双亲委派机制相关推荐

  1. (二)JVM成神路之剖析Java类加载子系统、双亲委派机制及线程上下文类加载器

    引言 上篇<初识Java虚拟机>文章中曾提及到:我们所编写的Java代码经过编译之后,会生成对应的class字节码文件,而在程序启动时会通过类加载子系统将这些字节码文件先装载进内存,然后再 ...

  2. java类加载过程(双亲委派机制)

    类加载运行全过程 通过Java命令执行代码的大体流程如下: 其中loadClass的类加载过程有如下几步: 加载 >> 验证 >> 准备 >> 解析 >> ...

  3. java类加载过程,双亲委派机制

    1.双亲委派机制 Parent Delegation Model 又称为父级委托模型.想要了解它,还需理解类加载机制.类加载器.类加载器的层级关系. 2.类加载机制: 编译器把Java源文件编译成.c ...

  4. Java虚拟机-双亲委派机制

    文章目录 双亲委派机制概述 双亲委派机制原理 双亲委派机制的优势 沙箱安全机制 破坏双亲委派机制 双亲委派机制概述 Java虚拟机对class文件采用按需加载的方式,也就是说当需要使用该类时,才会将它 ...

  5. 【JVM】Java类的加载流程以及双亲委派,全盘托管,以及如何打破双亲委派机制

    JVM基础生命周期流程图 只有main()方法的java程序执行流程 classLoader.loadClass()的类加载流程(除引导类,所有类都一样) 加载:通过IO查找读取磁盘上的字节码文件,在 ...

  6. Java基础(final关键字、双亲委派机制)

    Java基础 一.双亲委派机制 首先得了解类加载器Classloader在JVM中的分工: Bootstrap classLoader:主要负责加载核心的类库,构造ExtClassLoader和APP ...

  7. 深入JVM系列(三)之类加载、类加载器、双亲委派机制与常见问题

    转载自 深入JVM系列(三)之类加载.类加载器.双亲委派机制与常见问题 一.概述 定义:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用 ...

  8. Tomcat打破双亲委派机制

    打破双亲委派 沙箱安全机制示例,尝试打破双亲委派机制,用自定义类加载器加载自己实现的 java.lang.String.class public class MyClassLoaderTest {st ...

  9. 【java】 Java 类加载器 破坏双亲委派

    1.概述 深入探讨 Java 类加载器 Java双亲委派模型:为什么要双亲委派?如何打破它?破在哪里? Java中的双亲委派机制以及如何打破

最新文章

  1. Microsoft System Center 2012:将系统管理带入云中
  2. C++Primer学习——函数
  3. linux系统读取第二个盘的数据,磁盘及文件系统管理—第二篇
  4. 计算机合并键功能,Word组合(功能键与Ctrl等组合) -电脑资料
  5. js实现排序去重计算字符次数
  6. python最简单的图形编程_Python123
  7. Stm32 CubeMx安装和配置Cube.ai教程
  8. TCP数据报结构以及三次握手(图解)
  9. 微机综合保护装置怎么选择?在高压柜中起什么作用?
  10. 关于计算机网络简笔画,电脑卡通简笔画图片
  11. python爬取京东商品_Python爬取京东的商品分类与链接
  12. WIFI信道频率对应
  13. POJ 3626 Mud Puddles(超简单BFS)
  14. Oracle OR条件的优化与改写
  15. 浅谈数据治理(什么是数据治理)
  16. <Android开发> Android vold - 第三篇 vold 的NetLinkManager类简介
  17. Sentry 清理数据
  18. js 获取字符串长度方法length
  19. 为listview、或者recyclerView的item增加进场动画
  20. React之npm发布Antd样式的组件

热门文章

  1. php file_get_contents 临时目录 fopen,php读取本地文件常用函数(fopen与file_get_contents)_php基础...
  2. 数据库实验一 数据库定义及数据导入
  3. 圣诞树代码 html
  4. linux和windows2000中的安全措施
  5. Django项目之CRM客户关系管理——表结构的设计及MySQL的连接
  6. Vue 简单的记录div滚动条的位置,并返回顶部
  7. 用c语言实现位移传感器数据在液压系统中的数据采集例子,KTC直线位移传感器接FX3U-4AD模块的数据采集案例...
  8. Linux:fork是什么、使用方法、缓冲区问题、frok使用实例
  9. build-essential的作用
  10. Nuxt项目跳过“Are you interested in participation?”