类加载机制

      - 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. Android 自定义ViewGroup,实现侧方位滑动菜单

    侧方位滑动菜单 1.现在adnroid流行的应用当中很多都是用的侧方位滑动菜单如图:

  2. 所谓IIS未注册引起的故障及解决

  3. jquery.validate弹窗验证

     $(document).ready(function () { //开始验证        $("#form1").validate({            submitHan ...

  4. MS SQL Server计算间隔时间

    开始需要,写了一个计算时间间隔的函数,可以参考: 得到的结果: 再列举一个例子:

  5. Oracle下载及安装

    Oracle   下载及安装 一.官方下地址:   http://www.oracle.com/technetwork/database/enterprise-edition/downloads/in ...

  6. ecliplse集成SVN

    按照下图操作 : SVN不同版本下载链接在文章底部有提供 上图点击add之后稍等一会就会弹出下图: 上图点击next之后: 最后等待完成之后重启ecliplse即可 重启ecliplse之后显示SVN ...

  7. hbase安装 配置报错 zookeeper启动报错

    zookeeper安装问题,使用独立安装的zookeeper export HBASE_MANAGES_ZK=false   #如果使用独立安装的zookeeper这个地方就是false 创建zook ...

  8. C语言字符串拼接

    1.使用strcat进行字符串拼接 #include <stdio.h> #include <stdlib.h> #include <string.h> int m ...

  9. 洛谷P3236 [HNOI2014]画框(最小乘积KM)

    题面 传送门 题解 我似乎连\(KM\)都不会打啊→_→ 和bzoj2395是一样的,只不过把最小生成树换成\(KM\)了.因为\(KM\)跑的是最大权值所以取个反就行了 //minamoto #in ...

  10. WPF强制设置TextBox文本框的焦点

    在需求中遇到这样一种场景:就是在无论何时都要把焦点设置在一个TextBox中. 引用空间:System.Windows.Input 方式1:在窗体的Load事件中去设置焦点,(注意:不能在窗体的构造函 ...