一、JVM类加载机制简介

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

在Java语言里面,类型的加载和连接过程都是在程序运行期间完成的。

二、JVM加载类的过程

类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(using)和卸载(Unloading)七个阶段。其中验证、准备和解析三个部分统称为连接(Linking),这七个阶段的发生顺序如下图所示。

对于初始化阶段,虚拟机规定了只有在如下四种情况下,必须立即对类进行“初始化”(而加载、验证、准备自然需要在此之前开始):

1、遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。

2、使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先触发其初始化。

3、当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化。

4、当虚拟机启动时,用户需要制定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个类。

(1)加载阶段

在加载阶段,虚拟机需要完成以下3件事情:

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

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

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

(2)验证阶段

在验证阶段,需要对文件格式、元数据、字节码、符号引用等进行验证,目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。

3)准备阶段

准备阶段是正式为类变量分配并设置类变量初始值的阶段,这些内存都将在方法区中进行分配,需要说明的是:这时候进行内存分配的仅包括类变量(被static修饰的变量),而不包括实例变量,实例变量将会在对象实例化时随着对象一起分配在Java堆中,这里所说的初始值“通常情况”是数据类型的零值。如果类字段属性表中存在ConstantValue属性,那在准备阶段变量value就会被初始化为ConstantValue属性所指定的值。

(4)解析阶段

解析阶段是虚拟机将常量池内的符号引用替换成直接引用的过程,解析动作主要针对类或接口、字段、类方法、接口方法四类符号引用进行。

(5)初始化阶段

在准备阶段,变量已经赋过一次系统要求的初始值,而在初始化阶段,则是根据程序员通过程序制定的主观计划去初始化类变量和其他资源。

JVM(2)——JVM类加载机制相关推荐

  1. jvm运行时类加载机制_JVM体系结构:JVM类加载器和运行时数据区

    jvm运行时类加载机制 各位读者好! 在JVM系列的上一篇文章中,开发人员了解了Java虚拟机(JVM)及其体系结构. 本教程将帮助开发人员正确回答以下主题的问题: ClassLoader子系统 运行 ...

  2. JVM基础 - JAVA类加载机制

    JVM基础 - JAVA类加载机制 类的生命周期 其中类加载的过程包括了 加载 . 验证 . 准备 . 解析 . 初始化 五个阶段.在这五个阶段中, 加载 . 验证 . 准备 和 初始化 这四个阶段发 ...

  3. 深入理解JVM(5)——虚拟机类加载机制

    在Class文件中描述的各种信息,最终都需要加载到虚拟机中之后才能运行和使用.而虚拟机中,而虚拟机如何加载这些Class文件?Class文件中的信息进入到虚拟机中会发生什么变化?本文将逐步解答这些问题 ...

  4. 【深入理解JVM】ClassLoader类加载机制

    Java程序并不是一个原生的可执行文件,而是由许多独立的类文件组成,每一个文件对应一个Java类.此外,这些类文件并非立即全部装入内存的,而是根据程序需要装入内存.ClassLoader专门负责类文件 ...

  5. jvm(7)-虚拟机类加载机制

    [0]README 0.1)本文转自"深入理解jvm",旨在学习  虚拟机类加载机制 的基础知识: [1]概述 1)类加载机制:虚拟机把描述类的数据从Class 文件加载到内存,并 ...

  6. fegin需要实现类_深入理解JVM(六)--虚拟机类加载机制

    虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 类从被加载到虚拟机内存开始,到卸载出内存为止 ...

  7. [JVM]了断局: 类加载机制

    一.类加载的时机 二. 有且只有六种情况必须立即对类进行"初始化" 三.类加载的过程 1.加载 2.验证 1.文件格式验证 2.元数据验证 3.字节码验证 4.符号引用验证 3.准 ...

  8. 深入理解JVM之虚拟机类加载机制

    1.概述 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制.与那些在编译时需要进 ...

  9. JVM专题之类加载机制

    一 类加载是什么?什么时候加载类?加载过程是怎么样的? 1.1 什么是类加载 类加载就是指将在硬盘上编译好的class字节码文件,加载到JVM内存中,然后对字节码文件进行链接和初始化的过程.只有加载后 ...

  10. 探究java-JVM的五步(三步)类加载机制(包含类加载过程的一些代码书写,如类加载代码)

    前言: 写了不少java代码,以前一直都是关心java程序跑起来后的情况步骤,今天我们就来探究一下: 在java程序还是一个个存在于静态.class文件中的类(也可以是任何被JVM认可的文件,但本质还 ...

最新文章

  1. python之深浅拷贝
  2. tensorflow量化感知训练_tensorflow
  3. [.NET] Rough Dependency Injection
  4. Exchange Server 2016管理系列课件33.通讯组仲裁
  5. 【错误记录】jar 执行错误 ( java.lang.UnsupportedClassVersionError: Unsupported major.minor version 52.0 )
  6. C语言spirograph算法图形绘制(附完整源码)
  7. ios web页面测试方法
  8. E3 tree 1.6在Firefox下显示问题的修复
  9. 方维分享系统修改,本地安装失败,后台无法登陆
  10. 自反ACL实验(GNS3)
  11. ipad查看电脑中的文件
  12. 【沃顿商学院学习笔记】公益创业——01开始公益创业Starting a Social Enterprise
  13. PostgreSQL psql 命令语法参数说明
  14. web前端html5+css3学习笔记(3)——标签
  15. 手机re怎么刷linux,手机刷机刷入recovery的方法小米刷recovery固件方法
  16. OTB数据集的几个注意点
  17. maven:mirror和repository
  18. WSL构建nRF5 SDK + ARM GCC开发环境 – RTT打印调试日志
  19. 发票识别+发票真伪查验接口
  20. Linux:文件系统

热门文章

  1. matlab读取文件夹下所有文件的字符串,MATLAB读取文件夹下所有文件的文件名并读取数据...
  2. oom 如何避免 高并发_微博短视频百万级高可用、高并发架构如何设计?
  3. 数学界最恐怖的存在,学过数学的人,一辈子都不会忘记!
  4. 你在孩子身上偷的懒,终将会变成最大的遗憾
  5. 推荐15个 JavaScript 和 CSS 库
  6. 《SAS编程与数据挖掘商业案例》学习笔记之九
  7. 三分钟教会你Java while循环中嵌套if
  8. android最好的3d游戏机,终极盘点:Android必玩十大超猛3D游戏
  9. php 新浪面试题,php程序员面试题(新浪篇)
  10. php header会重定向吗,php – 可以依靠header()重定向来结束程序流吗?