1、类加载的生命周期

  类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:

  (1)加载

  (2)验证

  (3)准备

  (4)解析

  (5)初始化

  (6)使用

  (7)卸载

  一共7个阶段。其中验证、准备、解析这3个阶段统称为连接。

    这类加载的7个阶段顺序流程:

  

  加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的。类的加载过程中必须按照这种顺序按部就班地开始,而解析阶段则是不一定的,它在某些情况下可以在初始化阶段之后再开始,这是为了支持JAVA语言的运行时绑定(也称为动态绑定和晚期绑定)。

  初始化的时候执行一些静态代码块,静态变量等。

2、类加载的过程

  包括:加载、连接(验证、准备、解析)、初始化。

  

  (1)加载:“加载”是“类加载”的过程的一个阶段,在加载阶段虚拟机需要完成3件事:

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

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

    c、在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。

  (2)验证:验证是连接阶段的第一步,这个阶段的目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机的自身安全。

  (3)准备:准备阶段是正式为类变量分配内存并设置类变量初始值的阶段,这些变量所使用的内存都将在方法区中进行分配。首先,这时候进行内存分配的仅包括类变量(被static修饰的变量)。而不包括实例变量。实例变量将会在对象实例化时随着对象一起分配在java堆中。其次,这里所说的初始值“通常情况”下是数据类型的零值,假设一个类变量的定义为:

public static int value = ;

      那变量value值在准备阶段过后的初始值为0而不是112。因为这时候尚未开始执行任何JAVA方法。而把value赋值为112的public static 指令是程序编译后,存放于构造器<cinit>()方法 之中,所以把value赋值为112的动作将在初始化阶段才会执行。

      对于那种不是“通常情况”,而是“特殊情况”的变量:

public static int value = ;

      编译的时候Javac将会为value生成ConstantValue属性,在准备阶段虚拟机就会根据ConstantValue的设置将value赋值为123,。

  (4)解析:解析阶段是将虚拟机常量池内的符号引用替换为直接引用的过程。

  (5)初始化:类初始化是类加载过程的最后一步,在这个阶段,前面的类加载过程中,除了在加载阶段用户应用程序可以通过自定义加载器参与之外,其余动作完全由虚拟机主导和控制。到了初始化阶段,才真正开始执行类中定义的Java程序代码(或者说字节码)。在准备阶段,变量已经赋值过一次系统要求的初始值,而在初始化阶段,则根据程序员通过程序制定的主观计划去初始化变量和其他资源,或者可以从另外一个角度来表达,初始化阶段就是执行类构造器<cinti>()方法的过程。

JVM(三)JVM的ClassLoader类加载器的更多相关文章

  1. JVM源码分析--ClassLoader类加载器

    本人原创,转载请注明出处:https://www.cnblogs.com/javallh/p/10224187.html 1.JDK已有类加载器: BootStrap ClassLoader (启动类 ...

  2. ClassLoader类加载器

    总的来说,当动态加载一个资源时,至少有三种类加载器可供选择: 系统类加载器(也被称为应用类加载器)(system classloader) 当前类加载器(current classloader) 当前 ...

  3. java ClassLoader类加载器

    原文 首先来了解一下字节码和class文件的区别: 我们知道,新建一个java对象的时候,JVM要将这个对象对应的字节码加载到内存中,这个字节码的原始信息存放在classpath(就是我们新建Java ...

  4. 万万没想到,面试中,连 ClassLoader类加载器 也能问出这么多问题…..

    1.类加载过程 类加载时机 「加载」 将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在内存上创建一个java.lang.Class对象用来封装类在方法区内的数据 ...

  5. Java安全之 ClassLoader类加载器

    Java安全之 ClassLoader类加载器 0x00 前言 前面这里抛出一个问题,Java到底是什么类型的编程语言?是编译型?还是解释型?在这个问题是其实一直都都有疑惑,如果说是解释型语言的话,那 ...

  6. ClassLoader类加载器 & Java类加载机制 & 破坏双亲委托机制

    ClassLoader类加载器 Java 中的类加载器大致可以分成两类: 一类是系统提供的: 引导类加载器(Bootstrap classloader):它用来加载 Java 的核心库(如rt.jar ...

  7. 进阶Java编程(11)ClassLoader类加载器【待完成】

    1,ClassLoader类加载器简介 在Java里面提供一个系统的环境变量:ClassPath,这个属性的作用主要是在JVM进程启动的时候进行类加载路径的定义,在JVM里面可以根据类加载器而后进行指 ...

  8. JVM(三)从JVM源码角度看类加载器层级关系和双亲委派

    类加载器我们都知道有如下的继承结构,这个关系只是逻辑上的父子关系. 我们一直听说引导类加载器没有实体,为什么没有实体呢? 因为引导类加载器只是一段C++代码并不是什么实体类,所谓的引导类加载器就是那一 ...

  9. JVM体系结构之二:类加载器

    一.概述 定义:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型.类加载和连接的过程都是在运行期间完成的. 二. 类的加载 ...

  10. 【JVM学习笔记】系统类加载器

    可以通过“java.system.class.loader"属性指定系统类加载器 默认情况下,该属性值为空: public class Test { public static void m ...

随机推荐

  1. 手机布局rem的使用(rem)

    最后一堆代码是举例的全码. 一 直接<head>标签里套用以下,其他都不用 <script> document.documentElement.style.fontSize = ...

  2. DDR中常用概念

    一.DDR中的基本术语 (2)逻辑Bank SDRAM的内部是一个存储阵列,类似于一张表格.和表格的检索原理一样,先指定一个行(Row),再指定一个列(Column),就可以准确地找到所需要的单元格, ...

  3. Nodejs入门【转载】保留备用

    关于 本书致力于教会你如何用Node.js来开发应用,过程中会传授你所有所需的“高级”JavaScript知识.本书绝不是一本“Hello World”的教程. 状态 你正在阅读的已经是本书的最终版. ...

  4. progress 进度条

      进度条.  属性名 类型 默认值 说明 percent Float 无 百分比0~100 show-info Boolean false 在进度条右侧显示百分比 stroke-width Numb ...

  5. MySQL查询实例

    单表查询查询所有列 1 SELECT * FROM product; 查询指定列 1 SELECT pro_name,price,pinpai FROM product; 添加常量列 1 SELECT ...

  6. noip第3课作业

    1.    求最大值 [问题描述] 输入三个数a,b,c,输出三个整数中的最大值 [样例输入] 10 20 30 [样例输出] 30 #include <iostream> using n ...

  7. html5 定位

    需要实现的功能:移动端的网页,能定位到中文地址. 百度地图能实现这样的功能. 之前精度差得原因是,我用自己的mac做服务器,用手机来浏览定位,这样只能定位到mac 的地址,mac上浏览器的地址就没准了 ...

  8. poj3929

    题意: 如上图放置的一个圆锥,告诉你从圆锥顶的洞中流出多少体积的水,求现在水面高度.. 思路: 无聊时做的一道题,实际上就是一道高数题,重积分,可惜我高数本来也不好而且还忘光了,积了很久,而且错了很多 ...

  9. verilog选择数据类型时常犯的错误

    •    信号可以分为端口信号和内部信号.出现在端口列表中的信号是端口信号,其它的信号为内部信号. •    对于端口信号,输入端口只能是net类型.输出端口可以是net类型,也可以是register ...

  10. 11i - 12 Gather Schema Statistics fails with Ora-20001 errors after 11G database Upgrade (文档 ID 781813.1)

    11i - 12 Gather Schema Statistics fails with Ora-20001 errors after 11G database Upgrade (文档 ID 7818 ...