类的加载机制

article/2025/9/19 9:19:02

文章目录

  • 前言
    • 类加载的生命周期:加载(Loading)、验证(Verification)、准备(PreParation)、解析(Resolution)、初始化、使用、销毁,其中验证,准备,解析又叫做连接,解析有点特殊,某种特定情况下,解析是在初始化之后执行的。
  • 一、加载
    • 1.什么时候类开始加载?
    • 2.加载过程中虚拟机执行的操作
    • 3.程序员如何操作加载
    • 4.什么是类加载器
    • 5.系统提供的3种类加载器
      • 5.1.启动类加载器(Bootstrap ClassLoader)
      • 5.2.扩展类加载器(Extension ClassLoader)
      • 5.3.应用程序类加载器(Application ClassLoader)
      • 5.4.加载顺序如下
    • 6.双亲委派模型
      • 6.1.双亲委派原则的好处:
      • 6.2.双亲委派:
    • 7.自定义类加载器
  • 二、验证
    • 1.文件格式验证
    • 2.元数据验证
    • 3.元数据验证
    • 4.符号引用验证
  • 三、准备
  • 三、解析
    • 1.符号引用
    • 2.直接引用
  • 四、初始化


前言

类加载的生命周期:加载(Loading)、验证(Verification)、准备(PreParation)、解析(Resolution)、初始化、使用、销毁,其中验证,准备,解析又叫做连接,解析有点特殊,某种特定情况下,解析是在初始化之后执行的。

一、加载

1.什么时候类开始加载?

什么时候类开始加载,java虚拟机规范中并没有强制约束,是虚拟机根据具体情况实现来自由把握的。但是对于初始化,虚拟机则严格规定了5中情况(没有初始化时)必须对类进行初始化(而加载,验证,准备自然需要在此之前进行):

  • 当遇到new、getstatic、putstatic或invokestaic这四条字节码指令时。
  • 当使用java.lang.reflect包的方法对类进行反射的时候。
  • 当初始化一个类时,发现其父类没有初始化,则需要先触发其父类的初始化。
  • 当虚拟机启动时,用户需要指定一个执行的主类,虚拟机会选初始化这个主类。
  • 当使用jdk1.7的动态语言支持时,如果一个java.lang.invoke.MethodHandle实例最后解析结果REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄,如果这个句柄对应类没有初始化,则需要先触发初始化。

2.加载过程中虚拟机执行的操作

通过类型全限定名来获取这个类的二进制字节流
将这个字节流代表的静态存储结构转换成方法区的运行时数据结构
在内存中生成一个代表这个类的Class文件,作为方法区这个类的数据访问入口。

3.程序员如何操作加载

加载这个阶段相比其他阶段来说,是开发人员可控性最强的阶段。因为这个阶段既能使用系统提供的类加载器加载,又能通过开发人员自定义的类加载器进行加载。

4.什么是类加载器

虚拟机设计团队将加载动作放到了Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称之为“类加载器”。

5.系统提供的3种类加载器

5.1.启动类加载器(Bootstrap ClassLoader)

负责将存放在<JAVA_HOME>\lib目录中,或者被-Xbootclasspath参数所指定的路径中的,并且是虚拟机识别的类库加载到虚拟机内存中。(注:仅按照文件名识别,如rt.jar,名字不符合的类库即使放在lib目录中也不会被加载)

5.2.扩展类加载器(Extension ClassLoader)

负责加载<JAVA_HOME>\lib\ext目录中的,或被java.ext.dirs系统变量所指定的路径中的所有类库,开发者可以直接使用扩展类加载器。

5.3.应用程序类加载器(Application ClassLoader)

负责加载用户路径(ClassPath)上所指定的类库,开发者可以直接使用这个类加载器,一般情况下该类加载是程序中默认的类加载器。

5.4.加载顺序如下

类加载器加载顺序

6.双亲委派模型

在这里插入图片描述
如上图展示的类加载器之间的这种层次关系就是双亲委派模型。双亲委派模型要求除了顶层的启动类加载器外,其他的类加载器都应有自己的父类加载器。

6.1.双亲委派原则的好处:

避免重复加载同一个类;
防止用户任意修改java中的类;

6.2.双亲委派:

如果一个类加载器收到类加载的请求,他首先不会自己去尝试加载这个类,而是把请求委派给父类加载器去完成,每一层次的类加载器都是这样,因此所有的加载请求最终都应该传送到底层的启动类加载器中,只有当父类加载器反馈自己无法完成这个加载请求时(在它的加载路径下没有找到所需加载的Class),子类加载器才会尝试去加载。加载过程如下:
双亲委派过程

7.自定义类加载器

  • 如果我们自定义的加载器不想破坏双亲委派,继承 java.lang.ClassLoader 类并重写 findClass 方法。
  • 如果使用我们自定义的加载器破坏双亲委派,继承 ava.lang.ClassLoader
    类并重写loadClass(java.lang.String) 方法。

二、验证

验证主要有四个阶段:文件格式验证,元数据验证,字节码验证和符号验证

1.文件格式验证

这一阶段要验证字节流是否符合Class文件格式的规范,并且能被当前版本的虚拟机处理,主要包括魔数、版本号、常量池等验证。

2.元数据验证

这个阶段是对字节码描述的信息进行语义分析,以保证其描述的信息符合java语言规范的要求。主要包括是否有父类,类中的字段、方法是否与父类冲突,如果不是抽象类,是否实现了其父类或接口中要求实现的所有方法等;

3.元数据验证

这个阶段是在元数据验证之后,对类的方法体进行校验分析,保证被校验类的方法在运行时不会做出危害虚拟机的安全事件,主要目的是通过数据流和控制流分析,确定程序语义是合法的、符合逻辑的。也是验证过程最复杂的一个阶段。

4.符号引用验证

这个阶段的校验发生在虚拟机将符号引用转化为直接引用的时候。是对类自身以外的信息进行匹配性校验。主要目的是确保解析动作能正常执行。

三、准备

准备阶段是为类变量分配内存和类变量初始值的阶段。分配这些内存是在方法区内进行的。

  • 只有类变量(被static修饰的变量)会分配内存,不包括实例变量,实例变量是在对象实例化的时候在堆中分配内存的。
  • 设置类变量的初始值是数量类型对应的默认值,而不是代码中设置的默认值。例如public static int number=111,这类变量number在准备阶段之后的初始值是0而不是111。而给number赋值为111是在初始化阶段。
    基础数据类型默认值

三、解析

解析阶段是虚拟机将常量池里内的符号引用转换为直接引用。解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符等7类符号引用进行的。

1.符号引用

以一组符号来描述所有引用的目标,符号可以是任何形式的字面量,只要使用时能正确定义到目标即可。

2.直接引用

可以是直接指向目标的指针、相对偏移量或是一个能间接定位到目标的句柄。

四、初始化

这个是类加载的最后一步,这个阶段我们可以根据自身需求给类变量初始化赋值。


http://chatgpt.dhexx.cn/article/t73kPAI0.shtml

相关文章

类加载机制

1、JVM 和 类 &#xff08;1&#xff09;运行java命令&#xff1a; java 带有main方法的类名 ■ 命令的作用&#xff1a;启动jvm&#xff0c;并加载字节码&#xff0c;执行程序 当调用java命令来运行某个java程序时&#xff0c;该命令将会启动一个jvm进程&#xff08;同一个…

双亲委派模型的破坏

一、类加载机制 Java虚拟机把描述类的数据从Class文件加载进内存&#xff0c;并对数据进行校验&#xff0c;转换解析和初始化&#xff0c;最终形成可以被虚拟机直接使用的Java类型&#xff0c;这就是虚拟机的类加载机制。 虚拟机设计团队把类加载阶段中的“通过一个类的全限定…

类加载机制(整个过程详解)

一:背景 类加载机制是在我们的真个java的运行阶段中的其中一个阶段。 二:什么是快乐星球(类加载机制) 我们编写的 Java 文件都是以.java 为后缀的文件&#xff0c;编译器会将我们编写的.java 的文件编译成.class 文件&#xff0c;简单来说类加载机制就是jvm从文件系统将一系…

TCP/IP四层模型---应用层

相对于OSI七层模型,TCP/IP四层模型更为简化,总结为应用层,传输层,网络层,数据链路层四层 简单来说,四层协议分别为: 协议 应用层DNS,URI,HTML,HTTP,SSL,SMTP,POP,IMAPTELNET,SSH,FTP,SNMP应用程序相关传输层TCP,UDP,UDP-Lite,SCTP,DCCP操作系统内核负责网络层ARP,IP,ICMP数据链…

OSI七层网络模型与TCP/IP四层网络模型

OSI模型&#xff0c;即开放式通信系统互联参考模型(Open System Interconnection,OSI/RM,Open Systems Interconnection Reference Model)&#xff0c;是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架&#xff0c;简称OSI。 OSI网络模型按照…

TCP/IP五层(四层)模型

TCP/IP五层&#xff08;四层&#xff09;模型中包含的协议有很多&#xff0c;其中典型代表是TCP协议和IP协议。 应用层&#xff1a;应用程序直接打交道的协议。在实际开发中涉及最多的部分&#xff0c;甚至需要自己设计应用层协议。 传输层&#xff1a;负责端到端之间的传输。&…

【计算机网络】TCP/IP四层模型和OSI七层模型

文章目录 一、TCP/IP四层模型和OSI七层模型关系二、TCP/IP四层模型三、OSI七层模型四、GET和POST的区别五、从输入网址到页面展示的过程六、详细过程 一、TCP/IP四层模型和OSI七层模型关系 1、OSI引进了服务、接口、协议、分层的概念&#xff0c;TCP/IP借鉴了OSI的这些概念建立…

TCP/IP四层模型与OSI七层模型

1&#xff09;网络协议 【网络协议】是【网络上所有设备】&#xff08;网络服务器、计算机及交换机、路由器、防火墙等&#xff09;之间【通信规则】的【集合】&#xff0c;它规定了进行【网络中的对等实体数据交换】而建立的规则。由于大多数网络采用【分层的体系结构】&…

OSI七层模型和TCPIP四层网络模型

OSI七层模型和TCP/IP四层网络模型 写在文前&#xff0c;本篇文章是在学习过程抄录的笔记&#xff0c;需要更详细的内容可以在微信搜索javaguide公众号获取。1、OSI划分 七层划分&#xff1a;应用层、表示层、会话层、传输层、网络层、数据链路层、物理层五层划分&#xff1a;…

读懂TCP IP四层模型与OSI七层模型

目录 一、OSI七层模型 二、TCP/IP四层模型 三、OSI模型的七层解读 3.1 OSI七层模型小结 3.2 TCP/IP模型与OSI模型的对应关系 四、常见的网络相关协议 五、TCP和UDP协议 5.1 TCP三次握手 5.2 TCP四次挥手 5.3 UDP协议 5.4 TCP和UDP的区别 六、TCP/IP四层模型与OSI七…

Linux网络_从系统到网络(网络协议栈分层与功能,认识协议,OSI七层模型与TCPIP四层模型,网络通信流程(局域网,跨网络),MAC地址,IP地址)

文章目录 1.网络在体系结构的位置与网络协议栈的层状结构2.协议栈各层的功能3.协议4.OSI七层模型与TcpIp四层模型5.网络通信的流程局域网通信流程(以太网)MAC地址跨网络通信IP地址 1.网络在体系结构的位置与网络协议栈的层状结构 2.协议栈各层的功能 协议栈分层设计达到了解耦目…

TCP/IP五层(或四层)模型

图解TCP/IP协议 基本概念 1、TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议&#xff0c;可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口&#xff0c;使上层网络数据的传输建立在“无差别”的网络之上。 建立起一个TCP连接需要经过“三…

matlab怎么画两个自变量的图_tcpip四层模型怎么画?画模型图的好用软件推荐

tcpip四层模型就是一个将osi参考模型的会话层和表示层合并到应用层&#xff0c;数据链路层和物理层合并为链路层后的结果。tcpip四层模型包含应用层、运输层、网络层和链路层。tcpip四层模型的协议功能包括数据的发送、与硬件的交互、消息路由规则、格式定义、错误验证。 tcpip…

TCP/IP四层模型与OSI七层参考模型(网络协议)

TCP/IP四层模型与OSI七层参考模型 一. OSI七层参考模型①. 物理层②. 数据链路层③. 网络层④. 传输层⑤. 会话层⑥. 表示层⑦. 应用层 二. TCP/IP模型①. 物理层②. 数据链路层---网络协议③. 网络层---网络协议④. 传输层---网络协议⑤. 应用层---网络协议 三 .TCP/IP四层模型…

网络分层(OSI7层模型和TCP/IP四层模型)

1 OSI七层模型 1.1 物理层 主要定义物理设备标准&#xff0c;如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流&#xff08;就是由1、0转化为电流强弱来进行传输&#xff0c;到达目的地后再转化为1、0&#xff0c;也就是我们常说的数模…

TCPIP四层模型和OSI七层模型对应表

转载于:https://www.cnblogs.com/Pual623548198/p/7084421.html

计算机网络--TCP/IP四层模型

TCP/IP四层模型 在了解TCP/IP四层模型前,我们先来了解一下OSI七层结构。 OSI七层模型 虽然OSI七层模型划分的很完美,但是在实际应用当中有一些层的工作是重复的,所以出现了更贴近实际的TCP/IP四层模型。TCP/IP四层模型其实也就是将一些出现重复工作的层进行合并。比如将数…

计算机网络-OSI七层协议模型、TCPIP四层模型和五层协议体系结构之间的关系各层的作用

文章目录 一、结构二、对应的协议三、各层的作用1、物理层2、数据链路层3、网络层4、运输层5、会话层6、表示层7、应用层 一、结构 二、对应的协议 三、各层的作用 1、物理层 主要定义物理设备标准&#xff0c;如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。…

TCPIP四层协议

TCP/IP四层协议 在说TCP/IP四层协议之前&#xff0c;就不得不说OSI七层模型 OSI七层模型&#xff1a;自底向上依次是物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0c;传输层&#xff0c;会话层&#xff0c;表示层&#xff0c;应用层 TCP/IP体系结构的优点&#x…