类加载机制

      - JVM把class文件加载到内存中 并对数据进行 校验,解析,初始化,最终形成JVM可以直接使用的java类型的过程

       详细过程  加载→ 验证→ 准备→ 解析 → 初始化→ 使用 → 卸载  这是一个完整的类加载过程

            (验证,准备,解析)三步可以统称为链接  统称后就变为步骤变为  加载→链接→初始化→ 使用 → 卸载

  -加载   

      将class文件字节码内容加载到内存中 ,并将静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.class对象(我们使用反射得到的那个class对象就是这个,它相当于一面镜子,映射出方法区中该类的信息)作为方法区类数据的访问入口,这个过程需要类加载器的参与  (方法区中存放静态变量,静态方法,类代码信息,和常量,方法区是特殊的堆,)。

   -验证

      确保加载的类信息符合JVM规范,确保没有安全方面的问题

   -准备

      正是为类变量(static变量)分配内存并设置类变量初始值得阶段,这些内存都在方法区中进行分配(设置的初始值是默认值  比如 变量为int 那么初始值为0)

   -解析

      虚拟机常量池内的符号引用替换为直接引用的过程

      解释:符号引用是抽象的,比如孙悟空现在要找如来佛祖算账  ,但是并不知道如来在哪,但是换位直接引用后

      就相当于 孙悟空在 东海 100米处, 如来在灵山右20公里处,给出了具体的位置,这样就给出了具体的位置

   -初始化

      如果累被主动引用,比如new了一个对象,会发生初始化,如果是被动引用,比如只是引用了一个变量,则不会发生初始化

      初始化阶段是执行类构造器<clinit>()方法的过程,类构造器<clinit>()方法是由编译器自动收集类中的所有变量的赋值动作和静态语句块(static块)中的语句合并产生的

      初始化一个类的时候,如果发现其父类还没有被初始化,则需要先发出其父类的初始化

      虚拟机会保证一个类的<clinit>()方法在多线程环境中被正确的同步 ,线程安全的

      当访问java的一个静态域时,只有真正声明这个域的类才会被初始化

  使用 和 卸载  不在赘述

  下面是一个完整的类加载过程  加载后 ,的demo01被加载到 方法去,里面存放了类的信息,并在堆中生成 他的class对象 通过验证后 在准备这一步为 main方法中的变量a

赋值 ,经过解析后进行初始化,然后使用并卸载,注意的是  在初始化时 静态变量和静态语句块是合并执行的。

     

    -

JVM 类加载全过程的更多相关文章

  1. JVM类加载全过程--图解

    JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,下图为实例方法被调用时的JVM内存模型,1~7完整的描述了从类加载开始到方法执行前的预备过程,后面将对每一个步骤进行解释 在我们加载类的过程 ...

  2. JVM核心之JVM运行和类加载全过程

    为什么研究类加载全过程? 有助于连接JVM运行过程 更深入了解java动态性(解热部署,动态加载),提高程序的灵活性 类加载机制 JVM把class文件加载到内存,并对数据进行校验.解析和初始化,最终 ...

  3. JVM核心——JVM运行和类加载全过程

    1.类加载全过程 (1)类加载机制 JVM把class文件加载到内存,并对数据进行校验.解析和初始化,最终形成JVM可以直接使用的Java类型的过程. 加载 将class文件字节码内容加载到内存中,并 ...

  4. JVM总结(四):JVM类加载机制

    这一节我们来总结一下JVM类加载机制.具体目录如下: 类加载的过程 类加载过程概括 说说引用 详解类加载全过程: 加载 验证 准备 解析 初始化 虚拟机把描述类的数据从Class文件加载到内存,并对数 ...

  5. JVM 学习笔记一 :JVM类加载机制

    前言: 最近在看JVM相关资料,这里记录下学习笔记,希望自己能坚持学完,打牢基础.   一.类加载过程 1,类从被加载到JVM中开始,到卸载为止,整个生命周期包括:加载.验证.准备.解析.初始化.使用 ...

  6. 一夜搞懂 | JVM 类加载机制

    前言 本文已经收录到我的Github个人博客,欢迎大佬们光临寒舍: 我的GIthub博客 学习导图 一.为什么要学习类加载机制? 今天想跟大家唠嗑唠嗑Java的类加载机制,这是Java的一个很重要的创 ...

  7. JVM类加载过程学习总结

    JVM类加载过程学习总结 先不说JVM类加载的原理,先看实例: NormalTest类,包含了一个静态代码块,执行的任务就是打印一句话. /** * 在正常类加载条件下,看静态代码块是否会执行 * @ ...

  8. JVM类加载续

    上一篇理解了JVM类加载过程的第一个阶段,这篇来说说剩下的阶段:验证.准备.解析.初始化.需要注意的是,这些阶段(解析除外)只是按照这个顺序开始,但是执行的过程中可能存在交叉. 验证:就是要对加载的二 ...

  9. JVM类加载以及执行的实战

    前几篇文章主要是去理解JVM类加载的原理和应用,这一回讲一个可以自己动手的例子,希望能从头到尾的理解类加载以及执行的整个过程. 这个例子是从周志明的著作<深入理解Java虚拟机>第9章里抄 ...

随机推荐

  1. 客户端 post ,get 访问服务器

    private void sendReuestExpansion() { HttpRequest<T> req = this; HttpWebRequest request; try { ...

  2. VS Code 运行html文件

    用VS Code编写html文件,想在VS Code中直接打开运行,配置如下: 配置tasks.json 打开VS Code,点击"终端",选择"配置任务". ...

  3. 5种banner

      <!DOCTYPE html><html> <head>  <meta charset="UTF-8">  <tit ...

  4. 20165219 2017-2018-2 《Java程序设计》第8周学习总结

    20165219 2017-2018-2 <Java程序设计>第8周学习总结 教材学习内容总结 进程与线程 线程是比进程更小的单位:线程间可以共享进程中的某些内存单元 java的多线机制 ...

  5. 321. Create Maximum Number (c++ ——> lexicographical_compare)

    Given two arrays of length m and n with digits 0-9 representing two numbers. Create the maximum numb ...

  6. 杨辉三角的Python实现

      杨辉三角的Python实现 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 Python生成器实现杨辉三角: # python def yanghui_tr ...

  7. IIS发布的网页上传文件被拒绝

    在IIS所在的服务器共享的权限(如下图示,但注意不是加everyone)和共享文件夹的权限里都加上IIS_USER完全控制,如果不行再加上NETWORK SERVICE权限

  8. .NET clickonce修改发布名称等

    见图

  9. Python3入门之软件安装

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 最近将我的Python笔记整理下,希望能对他人有所帮助,这是第一课,安装入门篇: windows下安装Python 1.下载,从这里下载:[下载链 ...

  10. 《Andrew Ng深度学习》笔记3

    浅层神经网络 初步了解了神经网络是如何构成的,输入+隐藏层+输出层.一般从输入层计算为层0,在真正计算神经网络的层数时不算输入层.隐藏层实际就是一些算法封装成的黑盒子.在对神经网络训练的时候,就是对神 ...