当前位置:网站首页>九、请介绍类加载过程,什么是双亲委派模型?
九、请介绍类加载过程,什么是双亲委派模型?
2022-08-03 05:24:00 【世宇同学】
一、类加载
1.什么是类加载?
JVM将编译好的.class文件(字节码文件)以二进制流的方式加载到我们内存中,并且将二进制流中静态的数据结构转换成我们方法区中动态运行数据结构,并且在对堆内存生成一个java.lang.class对象,作为提供给外界访问我们方法区动态运行数据结构的一个入口。
2.类加载器有哪些?
主要的就是启动类加载器(BootStrap ClassLoader)和其他所有类加载器。
注意:启动类加载器是虚拟机的一部分,是由c++实现的,其它类加载器是独立于虚拟机外的一部分,都继承了抽象类java.lang.ClassLoader。
类加载器主要分为以下四部分:
启动类加载器:
扩展类加载器:
应用类加载器:
用户自定义类加载器
如下图所示:

二、什么是双亲委派模型?
当需要加载一个类的时候,子类加载器并不会马上去加载,而是依次去请求父类加载器加载,一直往上请求到最高类加载器:启动类加载器。当启动类加载器加载不了的时候,依次往下让子类加载器进行加载。当达到最底下的时候,如果还是加载不到该类,就会出现ClassNotFound的情况。
好处:保证了程序的安全性。例子:比如我们重新写了一个String类,加载的时候并不会去加载到我们自己写的String类,因为当请求上到最高层的时候,启动类加载器发现自己能够加载String类,因此就不会加载到我们自己写的String类了。
三、类加载的过程(5步)
加载:将java源代码编译后的.class字节码文件以二进制流的方式加载进内存
连接
验证:验证加载进来的二进制流是否符合虚拟机的规范,不会危害的虚拟机自身的安全
准备:给类变量(静态变量)赋予初始值,基本数据/引用类型数据
解析:将字符串引用转换为直接引用
初始化:变量赋予初始值、执行静态语句块、执行构造函数等等。
边栏推荐
猜你喜欢

Convolutional Nerual Nertwork(CNN)

自监督论文阅读笔记DisCo: Remedy Self-supervised Learning on Lightweight Models with Distilled Contrastive

001_旭日X3派初探:开箱测试

自我监督学习和BERT模型

VCC(电源)和 GND(地)之间电容的作用

KASLR-内核地址空间布局随机化

ZEMAX | 如何创建复杂的非序列物体

神经网络基础

二叉树常见的问题和解决思路

自监督论文阅读笔记 Self-Supervised Deep Learning for Vehicle Detection in High-Resolution Satellite Imagery
随机推荐
设备树解析源码分析<devicetree>-1.基础结构
cmdline -[command line,__fdt_pointer,initial_boot_params] boot_command_line 获取
自监督论文阅读笔记Index Your Position: A Novel Self-Supervised Learning Method for Remote Sensing Images Sema
Mysql 预准备语句详解(prepare、execute、deallocate)
ASP.NET MVC:自定义 Route
自监督论文阅读笔记 Self-Supervised Visual Representation Learning with Semantic Grouping
自监督论文阅读笔记 DenseCL:Dense Contrastive Learning for Self-Supervised Visual Pre-Training
opencv目标检测
page fault-页异常流程
【IDEA】字体修改-护眼主题-文件注释头设置
自监督论文阅读笔记DisCo: Remedy Self-supervised Learning on Lightweight Models with Distilled Contrastive
在大程序中怎么样显示LED点阵
自监督论文阅读笔记: MoCoV2使用动量对比学习改进基线
ZEMAX | 在设计抬头显示器(HUD)时需要使用哪些工具?
【HQL】(二) 查询使用正则表达式做列选择
卷积神经网络入门
时间盲注脚本
东南亚跨境电商
ZEMAX | 在 OpticStudio 中使用自由曲面进行设计
ZEMAX | 如何创建简单的非序列系统