02_类加载子系统

news/2024/11/15 0:42:54/

目录

    • 1、Jvm内存结构概述
    • 二、类加载器与类的加载过程
      • 1、类加载器子系统的作用
      • 2、类的加载过程
    • 三、类加载器的分类
      • 1、启动类加载器
      • 2、扩展类加载器
      • 3、应用程序类加载器
      • 4、用户自定义加载器
      • 5、获取ClassLoader的几种方式
    • ==五、双亲委派机制==
      • 1、什么是双亲委派机制
      • 2、双亲委派机制的工作原理
      • 3、demo验证
      • 4、双亲委派机制的优势
      • 5、沙箱安全机制
    • 六、其他一些要点
        • 1、判断JVM中两个class对象是否相等
        • 2、对类加载器的引用
        • 3、类的主动使用和被动使用

1、Jvm内存结构概述

在这里插入图片描述

二、类加载器与类的加载过程

1、类加载器子系统的作用

在这里插入图片描述

2、类的加载过程

在这里插入图片描述

三、类加载器的分类

在这里插入图片描述
如何获取四种类型的类加载器

public class ClassLoaderTest {public static void main(String[] args) {//获取系统类加载器ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();System.out.println(systemClassLoader);//sun.misc.Launcher$AppClassLoader@18b4aac2//获取其上层:扩展类加载器ClassLoader extClassLoader = systemClassLoader.getParent();System.out.println(extClassLoader);//sun.misc.Launcher$ExtClassLoader@1540e19d//获取其上层:获取不到引导类加载器ClassLoader bootstrapClassLoader = extClassLoader.getParent();System.out.println(bootstrapClassLoader);//null//对于用户自定义类来说:默认使用系统类加载器进行加载ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();System.out.println(classLoader);//sun.misc.Launcher$AppClassLoader@18b4aac2//String类使用引导类加载器进行加载的。---> Java的核心类库都是使用引导类加载器进行加载的。ClassLoader classLoader1 = String.class.getClassLoader();System.out.println(classLoader1);//null}
}

1、启动类加载器

在这里插入图片描述

2、扩展类加载器

在这里插入图片描述

3、应用程序类加载器

在这里插入图片描述

public class ClassLoaderTest1 {public static void main(String[] args) {System.out.println("**********启动类加载器**************");//获取BootstrapClassLoader能够加载的api的路径URL[] urLs = sun.misc.Launcher.getBootstrapClassPath().getURLs();for (URL element : urLs) {System.out.println(element.toExternalForm());}//从上面的路径中随意选择一个类,来看看他的类加载器是什么:引导类加载器ClassLoader classLoader = Provider.class.getClassLoader();System.out.println(classLoader);System.out.println("***********扩展类加载器*************");String extDirs = System.getProperty("java.ext.dirs");for (String path : extDirs.split(";")) {System.out.println(path);}//从上面的路径中随意选择一个类,来看看他的类加载器是什么:扩展类加载器ClassLoader classLoader1 = CurveDB.class.getClassLoader();System.out.println(classLoader1);//sun.misc.Launcher$ExtClassLoader@1540e19d}
}

在这里插入图片描述

4、用户自定义加载器

1)为什么需要自定义类加载器

2)用户自定义类加载器的实现步骤

5、获取ClassLoader的几种方式

在这里插入图片描述

public class ClassLoaderTest2 {public static void main(String[] args) {try {//1. 获取java.lang.String的类加载器ClassLoader classLoader = Class.forName("java.lang.String").getClassLoader();System.out.println(classLoader);//2. 获取当前线程的类加载器ClassLoader classLoader1 = Thread.currentThread().getContextClassLoader();System.out.println(classLoader1);//3. 获取系统类加载器的父加载器ClassLoader classLoader2 = ClassLoader.getSystemClassLoader().getParent();System.out.println(classLoader2);} catch (ClassNotFoundException e) {e.printStackTrace();}}
}

在这里插入图片描述

五、双亲委派机制

1、什么是双亲委派机制

在这里插入图片描述

2、双亲委派机制的工作原理

在这里插入图片描述

3、demo验证

自定义一个 java.lang包,并在其中定义一个String类
在这里插入图片描述
在测试方法中加载该类:
在这里插入图片描述
结果: 静态代码块【System.out.println(“我是自定义的String类的静态代码块”);】没有执行,说明加载到内存中的并不是自定义的java.lang.String。由于双亲委派机制,实际上是通过引导类加载器加载的java核心类库中的String类
在这里插入图片描述
打印加载String类的加载器:结果是null,表明确实是引导类加载器
在这里插入图片描述
双亲委派机制:反向委派
在这里插入图片描述

4、双亲委派机制的优势

在这里插入图片描述

5、沙箱安全机制

在这里插入图片描述

六、其他一些要点

1、判断JVM中两个class对象是否相等

在这里插入图片描述

2、对类加载器的引用

3、类的主动使用和被动使用

在这里插入图片描述


http://www.ppmy.cn/news/238305.html

相关文章

Python版Day8

344. 反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 来源:力扣(LeetCode&#x…

记录--JavaScript 中有趣的 9 个常用编码套路

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1️⃣ set对象:数组快速去重 常规情况下,我们想要筛选唯一值,一般会想到遍历数组然后逐个对比,或者使用成熟的库比如lodash之类的。 不过,ES…

忘记iPhone锁屏密码?三种方法帮你顺利解决!

不论是苹果手机用户还是安卓手机用户,如果开机的锁屏密码忘记的话,应该是比较麻烦的一件事情,iPhone用户如果连续尝试6次密码都不对的话,iPhone将会自动锁死,也就变成了我们常说的“砖机”,不过在iPhone锁死…

华为交换机记录日志_华为交换机日志导出 华为交换机日志导出命令

怎么查看华为交换机的系统日志? 如果需要, 您可以手动将事件添加到您要设置的每个事件中,并将其添加到您要踩踏的电话中。 华为手机自有日历: 无一次性设置, 无共享日历链接, 只从其他日历导入华为日历&…

iphone已停用解锁大概多少钱_iPhone停用怎么解锁 三种处理方法详解

【巴士数码】一些用户遇到了iPhone被停用的情况,不知道怎么解锁的具体操作方法,现在和大家分享三种iPhone停用怎么解锁的处理方法。如果你的iPhone或者iPad被停用了可以试试以下三种方法进行解锁。 如果你记得密码的话,请过1分钟后再试一次。而在忘记密码的情况下,iPhone停…

完美解决iPhone自带的邮箱连接outlook后无法发送邮件问题

测试环境 iPhone7;IOS12.0 由于outlook邮箱在往国外发送邮件时非常方便,既不会想gmail一样被墙,又不会像qq、163等国内邮箱可能发送不出去;本人也申请了一个outlook邮箱,但是在iPhone上添加账户后,既然无法…

《Datawhale南瓜书》出第二版啦!

Datawhale干货 作者:Datawhale开源项目团队 作为机器学习的入门经典教材,周志华老师的《机器学习》,自2016年1月底出版以来,首印5000册一周售罄,并在8个月内重印9次。先后登上了亚马逊,京东,当…

springboot+vue医院网上预约挂号系统4n9w0

在线挂号平台已经成为它运营过程中至关重要的因素。医院挂号管理系统,是在计算机与通信设备十分完备的基础上,为医院管理人员、医生、用户提供的系统化的管理平台。 本系统需要实现基础的医院介绍、线上挂号、在线咨询、医生请假等几个主要功能。 管理员…