码迷,mamicode.com
首页 > 其他好文 > 详细

jvm类加载机制

时间:2020-12-28 11:11:09      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:信息   元数据   验证过   数据信息   web   操作   复杂   网络   校验   

1、什么是jvm的类加载机制

  类加载机制是指我们将类的字节码文件所包含的数据读入内存,同时我们会生成数据的访问入口的一种 特殊机制。那么我们可以得知,类加载的最终产品是数据访问入口。

  加载类文件(即.class文件)的方式有以下几种:

  1. 从本地系统中直接加载。
  2. 通过网络下载的.class文件。比如Web Applet,也就是我们的小程序应用。
  3. 从war,jar等归档文件中加载class。
  4. 从专有数据库中提取.class文件。
  5. 将java源文件动态编译为.class文件,也就是运行时计算而成,java的动态代理技术就是这么实现的。
  6. 从加密文件中获取。典型的防止class文件被反编译的保护措施。

2、类装载的过程

  类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个过程包括:装载、验证、准备、解析、初始化、使用、卸载7个阶段。其中验证、准备、解析统称为链接。如下图     技术图片

 

 

  1. 装载(Loading):
    1. 通过一个类的全限定名获取定义此类的二进制字节流,由上文可知,我们不一定从字节码文件中获取字节流,还能通过上述多种方式获取字节流。
    2. 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
    3. 在java堆中生存一个代表这个类的java.lang.Class对象,作为对方法区中这些数据的访问入库。 

      获取类的二进制字节流的阶段是我们java程序员最关注的阶段,也是操作性最强的一个阶段,因为这个阶段我们可以对我们的类加载器进行操作 ,比如我们想自定义类加载器进行操作完成加载,又或者我们想通过java agent来完成我们的字节码增强操作。

  1. 连接(Linking):
    1. 验证(Verification):验证主要是为了保证被加载类的正确性,即装载的Class文件中的字节流保护的信息是否符合当前虚拟机的要求,并且还要求我们的信息不会危害虚拟机自身的安全,导致虚拟机的崩溃。这其中包括四个阶段:
      • 文件格式的验证:第一阶段要验证字节流是否符合class文件格式的规范,并且能被当前版本的虚拟机处理
      • 元数据的验证:第二阶段是对字节码描述的信息进行语义分析,以保证其描述的信息符合Java语言规范的要求。
      • 字节码验证:第三阶段是整个验证过程中最复杂的一个阶段,主要目的是通过数据流和控制流分析,确定程序语义是合法的、符合逻辑的。在第二阶段对元数据信息中的数据做完校验后,这个阶段将对类对方法体进行校验分析,保证被校验类对方法在运行时不会做出危害虚拟机安全对事件。
      • 符号引用验证:这是最后一个阶段的验证,它发生在虚拟机将符号引用转化为直接引用的时候(解析阶段), 可以看作是对类自身以外的信息(常量池中的各种符号引用)进行匹配性的校验。符号引用 验证的目的是确保解析动作能正常执行。
    2. 准备(Preparation):为类的静态变量分配内存,并将其初始化为默认值。
    3. 解析(Resolution):
  2. 初始化(Initialization):对类的静态变量,静态代码块执行初始化操作
  3. 使用(Useing):
  4. 卸载(Unloading):

 

jvm类加载机制

标签:信息   元数据   验证过   数据信息   web   操作   复杂   网络   校验   

原文地址:https://www.cnblogs.com/chalice/p/14163907.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!