Java虚拟机 - 双亲委派机制
文章目录
- 一、原理
- 二、作用
- 三、沙箱安全机制
- 四、补充内容
Java虚拟机对class文件采用的是 按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象。而且加载某个类的class文件时,Java虚拟机采用的是 双亲委派模式,即把请求交由父类处理,它是一种任务委派模式。
Tips:如果在工程目录的src下新建一个名为 java.lang 的包,在其中新建一个类名String的类,这个类能够正常运行吗?
程序代码如下:
package java.lang;public class String {static {System.out.println("能够初始化我吗?");}
}
public class Application {public static void main(String[] args) {java.lang.String str = new java.lang.String();System.out.println("hello,world");}
}
执行结果:
hello,world
说明并未初始化在java.lang包下自定义的String类。这是双亲委派机制保护了我们系统核心API不容易被破坏。
一、原理
1、如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行。
2、如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归请求最终将到达顶层的启动类加载器。
3、如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式。
二、作用
1、保护程序安全,防止核心API被随意篡改。在java.lang包下,开发者自定义的类中的main方法不允许执行,防止恶意代码对程序产生破坏。
2、避免类的重复加载。一个类只会被加载一次。
三、沙箱安全机制
自定义string类,但是在加载自定义String类的时候会率先使用引导类加载器加载,而引导类加载器在加载的过程中会先加载jdk自带的文件(rt. jar包中java\lang\String.class),报错信息说没有main方法,就是因为加载的是rt. jar包中的String类。这样可以保证对java核心源代码的保护,这就是沙箱安全机制。
四、补充内容
在JVM中表示两个class对象是否是同一个类的两个必要条件
1、类的完整路径一直(包名+类名)。
2、加载这个类的ClassLoader必须相同。
换句话说,在JVM中, 即使这两个类对象(class对象)来源同一个Class文件,被同一个虚拟机所加载,但只要加载它们的ClassLoader实例对象不同,那么这两个类对象也是不相等的。
对类加载器的引用
JVM必须知道–个类型是由启动加载器加载的还是由用户类加载
器加载的。如果一个类型是由用户类加载器加载的,那么JVM会将这个类加载器的一个引用作为类型信息的一部分保存在方法区中。当解析一个类型到另一个类型的引用的时候,JVM需要保证这两个类型的类加载器是相同的。
Java程序对类的使用方式分为:主动使用、被动使用两种方式
主动使用,又分为七种情况:
1、创建类的实例
2、访问某个类或者接口的静态变量,或者对该静态变量赋值
3、反射( 比如:Class.forName(“java.lang.String)))
4、初始化一个类的子类
5、java虚拟机启动时被标明为启动类的类
6、java 7开始提供的动态语言支持
除了以上七种情况,其他使用Java类的方式都被看作是对类的被动使用都不会导致类的初始化
Java虚拟机 - 双亲委派机制相关推荐
- Java虚拟机-双亲委派机制
文章目录 双亲委派机制概述 双亲委派机制原理 双亲委派机制的优势 沙箱安全机制 破坏双亲委派机制 双亲委派机制概述 Java虚拟机对class文件采用按需加载的方式,也就是说当需要使用该类时,才会将它 ...
- 关于Java类加载双亲委派机制的思考(附面试题)
转载自 关于Java类加载双亲委派机制的思考(附面试题) 预定义类加载器和双亲委派机制 JVM预定义的三种类型类加载器: 启动(Bootstrap)类加载器:是用本地代码实现的类装入器,它负责将 &l ...
- Java的双亲委派机制
Java的双亲委派机制是java中类加载过程采用的机制,所以首先要理解java的类加载过程. 类加载过程:程序经过javac.exe命令以后,会生成一个或多个class字节码文件,接着使用java.e ...
- java类加载机制为什么双亲委派_[五]类加载机制双亲委派机制 底层代码实现原理 源码分析 java类加载双亲委派机制是如何实现的...
Launcher启动类 本文是双亲委派机制的源码分析部分,类加载机制中的双亲委派模型对于jvm的稳定运行是非常重要的不过源码其实比较简单,接下来简单介绍一下我们先从启动类说起有一个Launcher类 ...
- Java打破双亲委派机制
1.自定义加载器 沿用双亲委派机制自定义类加载器很简单,只需继承ClassLoader类并重写findClass方法即可. ①先定义一个待加载的类Test,它很简单,只是在构建函数中输出由哪个类加载器 ...
- 「 JVM基础 」Java双亲委派机制
Java的双亲委派机制 参考&鸣谢 Dream_ling. weixin_39610188. JVM底层原理解析 文章目录 Java的双亲委派机制 一.介绍 二.什么是双亲委派机制 三.双亲委 ...
- Java双亲委派机制在Android的应用
Java的双亲委派机制 三层类加载器 1.启动类加载器(Bootstrap Class Loader) 这个类加载器负责加载存放在<JAVA_HOME>\lib目录,或者被-Xbootcl ...
- JAVA 双亲委派机制
最近突然看到了关于Java的双亲委派机制,作为一个搞Java的程序猿还是应该知道是怎么回事. 我用一个程序来简单说明是怎么回事吧 package java.util;/*** 本类中的main方法不会 ...
- java虚拟机中的双亲委派机制
文章目录 双亲委派机制 工作原理 工作场景 调用过程 三种加载器调用范围 String类加载过程 StringTest类加载过程 双亲委派机制优点 双亲委派机制 Java虚拟机对class文件采用的是 ...
最新文章
- HDU - 5176 The Experience of Love(并查集)
- 华为平板解锁工具_2020年备战考研必选8款平板电脑 平板电脑推荐(12月最新版)...
- Git Bash的一些命令和配置
- 什么是实验室人员比对人员_CNAS实验室认可对人员、设备的要求
- Android studio 3.x 安装genymotion插件
- 一年级abb式词语并造句_一年级abb式词语并造句_一年级语文下册总复习
- Tomcat 部署方式
- React使用本地svg图片配置
- 代码随想录训练营day7
- 第四篇 安装系统与多重引导
- JAVA开发与运维(web生产环境部署)
- 分布式系统阅读笔记(十八)-----副本备份技术
- djang urls.py 无名有名分组,反向解析,路由分发,名称空间,伪静态,虚拟环境,django版本...
- 【bug解决】由于找不到vcruntime140_1.dll,无法继续执行代码。重新安装程序可能会解决此问题。
- Allegro如何导入第三方网表操作指导
- AV-TEST杀毒软件能力测试(2018年1月-12月)杀毒软件排名
- 所有人都需要的个人软实力(深度好文)
- Use of undefined constant MYSQL_ASSOC - assumed ‘MYSQL_ASSOC‘的解决方法
- 本科毕业论文要求重复率多少?
- AI的星辰与大海,百度的理性和感性