全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JVM加载一个类的过程

类的加载过程

Java源代码被编译成class字节码,JVM把描述类数据的字节码.Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。

类从被加载到虚拟机内存中开始,到卸载出内存为止,它的生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)、卸载(Unloading)七个阶段,其中验证、准备、解析三个部分统称链接。

加载(装载)、验证、准备、初始化和卸载这五个阶段顺序是固定的,类的加载过程必须按照这种顺序开始,而解析阶段不一定;它在某些情况下可以在初始化之后再开始,这是为了运行时动态绑定特性(也称为动态绑定或者晚期绑定,例如重写)。

1.加载:

在加载阶段,虚拟机主要完成三件事:

1.通过一个类的全限定名来获取定义此类的二进制字节流。

2.将这个字节流所代表的静态存储结构转化为方法区域的运行时数据结构。

3.在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区域数据的访问入口

相对于类加载过程的其他阶段,加载阶段(准备地说,是加载阶段中获取类的二进制字节流的动作)是开发期可控性最强的阶段,因为加载阶段可以使用系统提供的类加载器(ClassLoader)来完成,也可以由用户自定义的类加载器完成,开发人员可以通过定义自己的类加载器去控制字节流的获取方式。

加载阶段完成后,虚拟机外部的二进制字节流就按照虚拟机所需的格式存储在方法区之中,方法区中的数据存储格式有虚拟机实现自行定义,虚拟机并未规定此区域的具体数据结构。然后在java堆中实例化一个java.lang.Class类的对象,这个对象作为程序访问方法区中的这些类型数据的外部接口。

2.验证:

验证阶段作用是保证Class文件的字节流包含的信息符合JVM规范,不会给JVM造成危害。如果验证失败,就会抛出一个java.lang.VerifyError异常或其子类异常。验证过程分为四个阶段

1.文件格式验证:验证字节流文件是否符合Class文件格式的规范,并且能被当前虚拟机正确的处理。

2.元数据验证:是对字节码描述的信息进行语义分析,以保证其描述的信息符合Java语言的规范。

3.字节码验证:主要是进行数据流和控制流的分析,保证被校验类的方法在运行时不会危害虚拟机。

4.符号引用验证:符号引用验证发生在虚拟机将符号引用转化为直接引用的时候,这个转化动作将在解析阶段中发生。

3.准备:

准备阶段为变量分配内存并设置类变量的初始化。在这个阶段分配的仅为类的变量(static修饰的变量),而不包括类的实例变量。对已非final的变量,JVM会将其设置成“零值”,而不是其赋值语句的值:

pirvate static int size = 12;

那么在这个阶段,size的值为0,而不是12。 final修饰的类变量将会赋值成真实的值。

4.解析:

解析阶段是虚拟机常量池内的符号引用替换为直接引用的过程。

符号引用:符号引用是一组符号来描述所引用的目标对象,符号可以是任何形式的字面量,只要使用时能无歧义地定位到目标即可。符号引用与虚拟机实现的内存布局无关,引用的目标对象并不一定已经加载到内存中。

直接引用:直接引用可以是直接指向目标对象的指针、相对偏移量或是一个能间接定位到目标的句柄。直接引用是与虚拟机内存布局实现相关的,同一个符号引用在不同虚拟机实例上翻译出来的直接引用一般不会相同,如果有了直接引用,那引用的目标必定已经在内存中存在。

虚拟机规范并没有规定解析阶段发生的具体时间,只要求了在执行anewarry、checkcast、getfield、instanceof、invokeinterface、invokespecial、invokestatic、invokevirtual、multianewarray、new、putfield和putstatic这13个用于操作符号引用的字节码指令之前,先对它们使用的符号引用进行解析,所以虚拟机实现会根据需要来判断,到底是在类被加载器加载时就对常量池中的符号引用进行解析,还是等到一个符号引用将要被使用前才去解析它。

解析的动作主要针对类或接口、字段、类方法、接口方法四类符号引用进行。分别对应编译后常量池内的CONSTANT_Class_Info、CONSTANT_Fieldref_Info、CONSTANT_Methodef_Info、CONSTANT_InterfaceMethoder_Info四种常量类型。

1.类、接口的解析

2.字段解析

3.类方法解析

4.接口方法解析

5.初始化:

类的初始化阶段是类加载过程的最后一步,在准备阶段,类变量已赋过一次系统要求的初始值,而在初始化阶段,则是根据程序员通过程序制定的主观计划去初始化类变量和其他资源,或者可以从另外一个角度来表达:初始化阶段是执行类构造器

6.使用:

新线程---程序计数器----jvm栈执行(对象引用)-----堆内存(直接引用)----方法区

7.卸载:

GC垃圾回收

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# jvm加载类过程  # jvm  # 类加载  # jvm之java类加载机制和类加载器(ClassLoader)的用法  # JVM类加载机制原理及用法解析  # 深入理解JVM之类加载机制详解  # 一文读懂Jvm类加载机制  # JVM的类加载过程以及双亲委派模型详解  # JVM核心教程之JVM运行与类加载全过程详解  # 详解JVM类加载机制及类缓存问题的处理方法  # jvm类加载器基础解析  # 浅谈JVM核心之JVM运行和类加载  # JVM类加载机制详解  # 从JVM分析Java的类的加载和卸载机制  # 通俗讲解JVM的类加载机制  # 加载  # 绑定  # 在这个  # 数据结构  # 转化为  # 区中  # 自己的  # 而不是  # 堆中  # 这是  # 就会  # 是在  # 地说  # 将会  # 子类  # 将在  # 句柄  # 这就是  # 则是  # 而在 


相关文章: 网站设计制作企业有哪些,抖音官网主页怎么设置?  ,怎么用自己头像做动态表情包?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  名字制作网站免费,所有小说网站的名字?  深入理解Android中的xmlns:tools属性  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  如何用AWS免费套餐快速搭建高效网站?  焦点电影公司作品,电影焦点结局是什么?  贸易公司网站制作流程,出口贸易网站设计怎么做?  如何用VPS主机快速搭建个人网站?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  C#怎么使用委托和事件 C# delegate与event编程方法  如何通过山东自助建站平台快速注册域名?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  建设网站制作价格,怎样建立自己的公司网站?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  南京网站制作费用,南京远驱官方网站?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  制作企业网站建设方案,怎样建设一个公司网站?  建站之星如何快速解决建站难题?  如何在Windows环境下新建FTP站点并设置权限?  北京的网站制作公司有哪些,哪个视频网站最好?  linux top下的 minerd 木马清除方法  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  如何基于云服务器快速搭建网站及云盘系统?  股票网站制作软件,网上股票怎么开户?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  建站主机服务器选购指南:轻量应用与VPS配置解析  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  建站之星3.0如何解决常见操作问题?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何挑选最适合建站的高性能VPS主机?  ,柠檬视频怎样兑换vip?  教学网站制作软件,学习*后期制作的网站有哪些?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  如何自定义建站之星模板颜色并下载新样式?  建站为何优先选择香港服务器?  建站上市公司网站建设方案与SEO优化服务定制指南  如何制作算命网站,怎么注册算命网站?  宝塔建站后网页无法访问如何解决?  移民网站制作流程,怎么看加拿大移民官网?  非常酷的网站设计制作软件,酷培ai教育官方网站?  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  建站主机如何选?性能与价格怎样平衡?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。