1、加载(一般人所熟悉的双亲委托模型,这只是一个过程)

类的加载阶段,主要是获取定义此类的二进制字节流,并将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构,最后在Java堆中生成一个代表这个类的java.lang.Class对象作为方法区这些数据的访问入口。相对于类加载过程的其他阶段,加载阶段是开发期可控性最强的阶段。我们可以通过定制不通的类加载器,也就是ClassLoader来控制二进制字节流的获取方式。(双亲委托模型的过程,找到对应类的位置,以及确定类加载器)

2、验证

验证,准备和解析其实都属于连接阶段,而验证就是连接阶段的第一步。这一阶段主要是为了确保Class文件的字节流中包含的信息复合当前虚拟机的要求,并且不会危害虚拟机自身的安全。主要验证过程包括:文件格式验证,元数据验证,字节码验证以及符号引用验证。 
   
   3、准备

准备阶段正式为类变量分配内存并设置初始值。这里的初始值并不是初始化的值,而是数据类型的默认零值。这里提到的类变量是被static修饰的变量,而不是实例变量。关于准备阶段为类变量设置零值的唯一例外就是当这个类变量同时也被final 修饰,那么在编译时,就会直接为这个常量赋上目标值。

4、解析

解析时虚拟机将常量池中的符号引用替换为直接引用的过程。

5、初始化

在准备阶段,变量已经赋过一次系统要求的初始值,在初始化阶段,则是根据程序员通过程序的主观计划区初始化类变量和其   他资源。Java虚拟机规范规定了有4种情况必须立即对类进行初始化(加载,验证,准备必须在此之前完成) 
  1)当使用new关键字实例化对象时,当读取或者设置一个类的静态字段(被final修饰的除外)时,以及当调用一个类的静态     方法时(比如构造方法就是静态方法),如果类未初始化,则需先初始化。 
  2)通过反射机制对类进行调用时,如果类未初始化,则需先初始化。 
  3)当初始化一个类时,如果其父类未初始化,先初始化父类。 
  4)用户指定的执行主类(含main方法的那个类)在虚拟机启动时会先被初始化。

除了上面这4种方式,所有引用类的方式都不会触发初始化,称为被动引用。如:通过子类引用父类的静态字段,不会导致子类  初始化;通过数组定义来引用类,不会触发此类的初始化;引用类的静态常量不会触发定义常量的类的初始化,因为常量在编  译阶段已经被放到常量池中了。

jvm classLoader 过程相关推荐

  1. JVM编译过程与后期的优化

    文章目录 一.JVM编译过程 二.即时编译器优化(后期优化) 1.编译器 2.编译触发的条件 3.编译优化技术(挑重要的讲几个) 三.后记 一.JVM编译过程 引用自博客:https://blog.c ...

  2. jvm类加载过程_JVM知识点——深入理解JVM的类加载

    前言: 前面又说到Java程序实际上是将.class文件放入JVM中运行.虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换,解析和初始化,最终形成可以被虚拟机直接使用的Java类 ...

  3. jvm类加载过程_JVM类生命周期概述:加载时机与加载过程

    作者:菜鸟小于 https://www.cnblogs.com/Young111/p/11359700.html 一个.java文件在编译后会形成相应的一个或多个Class文件,这些Class文件中描 ...

  4. jvm类加载过程_详解JVM类加载

    1. Java对象的创建过程 类加载检查 ===> 分配内存 ===> 初始化零值 ===> 设置对象头 ===> 执行init方法 1.1 类加载检查 虚拟机遇到一条new指 ...

  5. JVM系列(一):JVM类加载过程详解

    Java 通过引入字节码和 JVM 机制,提供了强大的跨平台能力,理解 Java 的类加载机制是深入 Java 开发的必要条件. 一.Java代码执行流程 Java程序运行时,必须经过编译和运行两个步 ...

  6. JVM优化过程全记录

    今天看JVM群里有人发了一个GC情况,让人帮忙看优化的,于是我也凑热闹发了出来想让群里的大神们指导优化一下,以下是优化过程记录. 一开始我贴了下面的两张图 jstat看GC记录 jstat -gcut ...

  7. JVM类加载机制详解(一)JVM类加载过程

    2019独角兽企业重金招聘Python工程师标准>>> 首先Throws(抛出)几个自己学习过程中一直疑惑的问题: 1.什么是类加载?什么时候进行类加载? 2.什么是类初始化?什么时 ...

  8. java 多态实现的jvm调用过程_多态:JVM是如何进行方法调用的

    在我们平时的工作学习中写java代码时,如果我们在同一个类中定义了两个方法名和参数类型都相同的方法时,编译器会直接报错给我们.还有在代码运行的时候,如果子类定义了一个与父类完全相同的方法的时候,父类的 ...

  9. JVM—类加载过程学习

    1 类加载过程图解   系统加载Class类型的文件主要是:加载->连接->初始化,其中连接分为:验证->准备->解析:其实,整个生命周期是7步,类从被加载到虚拟机内存中开始, ...

最新文章

  1. SAP MM 初阶循环盘点的ABCD 标识符
  2. 创建型模式之Prototype
  3. java 执行cmd windows_Windows平台Java调用cmd命令执行程序
  4. Javascript各种事件汇总
  5. 10 个小技巧:快速用 Python 进行数据分析
  6. html css js调用dll,js调用Activex的dll
  7. ITK:过滤图像而没有复制其数据
  8. c++ opencv添加logo_OpenCV-Python 图像平滑 | 十六
  9. 音乐学院计算机考试内容,中国音乐学院2014年秋季本科考试试卷-计算机基础C
  10. df 命令查看磁盘空间_Linux df命令检查磁盘空间
  11. truffle部署到测试网rinkeby
  12. 多种CAML条件的查询
  13. GW INSTEK GPD 3303系列稳压源控制软件(自行使用c#编写)更新
  14. Tegra3 1080p高清播放时电源管理方式和功耗分析
  15. Neo4j因果集群路由策略详解及驱动访问
  16. 【建议收藏】Android初级开发者怎样快速提高开发技能?这20个开源APP能帮到你
  17. Codeforce 1296 E String Coloring
  18. python libusb_python, libusb, pyusb
  19. 吐血整理:最受欢迎的250份学习资料,99%的DBA都收藏了!
  20. linux多线程编程--学习笔迹4

热门文章

  1. LookupError: No installed app with label 'user'
  2. 验证Ross《随机过程》(第二版)1.9C
  3. K-means算法在手写体数字图像数据上的使用示例-代码详解
  4. python3类与对象汽车,Python3 类与对象
  5. 我所了解的Chrome
  6. CSU 1785: 又一道简单题
  7. 在robotframework中连接数据库进行操作
  8. ESG里程碑:发布第100份实验室报告
  9. ahjesus 创建msdn一样的帮助文档
  10. Google电子地图基础及应用