iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java虚拟机之双亲委派机制详解
  • 479
分享到

Java虚拟机之双亲委派机制详解

2024-04-02 19:04:59 479人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、原理二、作用三、沙箱安全机制四、补充内容总结Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象

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类的方式都被看作是对类的被动使用都不会导致类的初始化

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: Java虚拟机之双亲委派机制详解

本文链接: https://www.lsjlt.com/news/161290.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java虚拟机之双亲委派机制详解
    目录一、原理二、作用三、沙箱安全机制四、补充内容总结Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象...
    99+
    2024-04-02
  • 详解jvm双亲委派机制
    目录双亲委派机制类加载器种类双亲委派机制为什么要设计双亲委派机制?自定义类加载器打破双亲委派机制双亲委派机制 ​记录一下JVM的双亲委派机制学习记录。 类加载器种类 ​当我们运行某一...
    99+
    2022-11-13
    jvm双亲委派机制 jvm双亲委派
  • Java虚拟机中的双亲委派机制怎么理解
    Java虚拟机中的双亲委派机制怎么理解,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类...
    99+
    2023-06-22
  • Java虚拟机类加载器之双亲委派机制模型案例
    1. 双亲委派模型是什么? 当某个类加载器需要加载某个.class字节码文件时,它首先把这个任务委托给它的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类...
    99+
    2024-04-02
  • java双亲委派机制怎么实现
    Java的双亲委派机制是通过ClassLoader来实现的。ClassLoader是Java虚拟机中负责加载类的机制,它按照一定的规...
    99+
    2023-10-08
    java
  • java双亲委派机制怎么应用
    Java的双亲委派机制是一种类加载器的工作方式,用于保护Java应用程序的安全性和稳定性。它的应用主要包括以下几个方面:1. 自定义...
    99+
    2023-10-11
    java
  • java双亲委派机制有什么作用
    Java双亲委派机制是一种类加载机制,其作用主要有两个方面: 避免类的重复加载:当一个类加载器需要加载一个类时,它会先委托给其父...
    99+
    2024-04-02
  • Java虚拟机之对象创建过程与类加载机制及双亲委派模型
    目录一、对象的创建过程: 1、对象的创建过程:2、对象的访问方式:二、类加载机制:2.1、加载阶段:2.2、验证阶段:2.3、准备阶段:2.4、解析阶段:2.5、初始化:2...
    99+
    2024-04-02
  • tomcat怎么打破双亲委派机制
    在Tomcat中打破双亲委派机制并不推荐,因为双亲委派机制是Java类加载机制的重要组成部分,可以提高安全性和稳定性。如果一定要打破...
    99+
    2024-04-02
  • ClassLoader双亲委派模式作用详解
    目录前言ClassLoader的作用ClassLoader的种类如何实现双亲委派模式小测试前言 我们的面试中经常会遇到关于ClassLoader的问题,但是我们的日常开发中又没有直接...
    99+
    2022-11-13
    ClassLoader双亲委派 ClassLoader 模式
  • Tomcat打破双亲委派机制实现隔离Web应用的方法
    目录Tomcat类加载器的层次结构WebAppClassLoaderSharedClassLoaderCatalinaClassLoaderCommonClassLoaderSpri...
    99+
    2024-04-02
  • 浅谈Tomcat如何打破双亲委托机制
    目录JVM的类加载器Tomcat的类加载器findClassloadClass我们经常会遇到ClassNotFound异常,表明JVM在尝试加载某类时失败了。 要解决这个异常,你得...
    99+
    2024-04-02
  • Tomcat是如何打破双亲委托机制的
    本篇内容介绍了“Tomcat是如何打破双亲委托机制的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录JVM的类加载器Tomcat的类加载器...
    99+
    2023-06-20
  • Java类加载器与双亲委派机制和线程上下文类加载器专项解读分析
    目录一、类加载器1.启动类加载器2.拓展类加载器3.应用类加载器4.类的命名空间二、双亲委派机制1.类加载机制流程2.类加载器加载顺序3.双亲委派机制流程4.源码分析5.双亲委派机制...
    99+
    2022-12-22
    Java类加载器 Java双亲委派机制 Java线程上下文类加载器
  • java虚拟机之JVM调优详解
    目录JVM常用命令行参数1. 查看参数列表2. 基本参数说明:3. 扩展参数说明:虚拟机参数分类什么是调优1.调优步骤:2.调优案例2.1案例一2.2案例二JVM优化总结JVM常用命...
    99+
    2024-04-02
  • jvm虚拟机类加载机制详解
    目录1 概述2 类的加载时机3 类的加载过程3.1 加载3.2 验证3.3 准备3.4 解析3.5 初始化4 类加载器4.1 双亲委派模型4.2 破坏双亲委派模型1 概述 ​ Jav...
    99+
    2024-04-02
  • Java 虚拟机(JVM)之基本概念详解
    1、类加载子系统:负责从文件系统或者网络中加载Class信息,加载的信息存放在一块称之为方法区的内存空间。2、方法区:就是存放类信息、常量信息、常量池信息、包括字符串字面量和数字常量等。方法区是辅助堆栈的块永久区,解决堆栈信息的产生,是先决...
    99+
    2023-05-31
    java 虚拟机 基本概念
  • C++ 虚拟函数详解:解答多态机制之谜
    c++++虚拟函数是实现多态性的关键,它允许派生类覆盖父类的行为:声明为虚函数,并在派生类中出现。调用时,编译器根据对象类型动态解析正确的函数版本。纯虚函数强制派生类提供自己的实现,以实...
    99+
    2024-04-29
    c++ 多态
  • Java 虚拟机栈详解分析
    Java虚拟机栈 1. 定义 栈:线程运行时需要的内存空间,一个栈存在多个栈帧。栈具有先入后出,后入先出的特点。 栈帧:每个方法运行时需要的内存(局部变量表、操作数...
    99+
    2024-04-02
  • java虚拟机指令dup详解
    本文实例为大家介绍了java虚拟机指令dup,供大家参考,具体内容如下举个例子:public class ExceptionTest{ void cantBeZero(int i) throws Exception{ throw n...
    99+
    2023-05-31
    java dup ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作