一、虚拟机类概加载概述

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

Java语言支持动态加载和动态连接。

二、虚拟机加载类的具体过程

  1.类加载总的流程

  加载-->连接(验证、准备、解析)-->初始化,需要注意的是每个阶段之间没有完全清晰的界限,通常是前一个阶段执行到某处,就会触发下

个阶段的执行。

  2.类加载过程中各步骤的具体任务

  加载阶段:需要完成3个任务。通过类名获得Class文件(注意:字节码文件的来源可以是任意的);将这个字节码文件代表的静态存储结构转换

为方法区的运行时数据结构;在Java堆中生成一个代表该类字节码文件的java.lang.Class文件的对象,该对象作为程序访问方法区数据的入口。

注意:方法区的数据结构由虚拟机自己定义,加载阶段与连接阶段的部分是交叉进行的。

  验证:验证是连接的第一步,主要的目的是确保字节码文件中的信息符合虚拟机的要求,并且不会对虚拟机造成伤害。不同的虚拟机对字节码

文件的验证可能会不同,主要分为4部分的验证:

  文件格式验证:检验字节码文件的格式规范,并且验证是否能被当前版本的虚拟机处理。只有完成这部分验证,字节码文件才能进入方法区,

后面3个部分的验证是基于方法区的验证。

  元数据验证:对字节码的描述信息进行语义分析,确保描述信息符合Java语言规范。

  字节码验证:是整个验证过程中最复杂的部分,主要是对数据流和控制流的验证,确保类的方法在运行的时候不会对虚拟机造成危害。

  符号引用验证:这个阶段发生在虚拟机将符合引用转换为直接引用的过程中,这部分发生解析阶段。这个阶段的目的就是确保解析阶段

可以被正常的执行。

  准备:目的是对所有的类变量--静态成员变量进行默认初始化。

  解析:将虚拟机常量池中的符号引用转换为直接引用的过程。分为4类,类或接口的解析;字段的解析;类方法的解析、接口方法的解析

  初始化:执行字节码文件定义的初始化。

三、类与类加载器

  类加载器:其实就是一段代码用来实现类的加载,但是需要注意的是使用不同的类加载器加载,在堆中生成的Class对象是不相等的。

  类加载器的分类:启动类加载器(属于JVM的一部分)、扩展类加载器、应用程序类加载器,以及自定义的类加载器。通常应用程序的加载都是由这3种

  加载器配合一起完成类的加载。

  类加载器的双亲委派模型:如果一个类加载器收到了类加载的亲求,先传给其上级的类加载器,看是否被加载过,每一级类加载器都是这样操作

  上级类记载器没加载过,自己又不想加载的时候,下级类加载器才开始工作。注意:各级类加载器类之间的关系是组合关系,不是继承。

  

Java虚拟机类加载机制--概述的更多相关文章

  1. Java虚拟机类加载机制——案例分析

    转载: Java虚拟机类加载机制--案例分析   在<Java虚拟机类加载机制>一文中详细阐述了类加载的过程,并举了几个例子进行了简要分析,在文章的最后留了一个悬念给各位,这里来揭开这个悬 ...

  2. 深入理解Java虚拟机---类加载机制(简略版)

    类加载机制 谈起类加载机制,在这里说个题外话,当初本人在学了两三个月的Java后,只了解了一些皮毛知识,就屁颠屁颠得去附近学校的招聘会去蹭蹭面试经验,和HR聊了一会后开始了技术面试,前抛出了两个简单的 ...

  3. 面试官,不要再问我“Java虚拟机类加载机制”了

    关于Java虚拟机类加载机制往往有两方面的面试题:根据程序判断输出结果和讲讲虚拟机类加载机制的流程.其实这两类题本质上都是考察面试者对Java虚拟机类加载机制的了解. 面试题试水 现在有这样一道判断程 ...

  4. [转]Java虚拟机类加载机制

    原文地址:http://blog.csdn.net/u013256816/article/details/50829596 看到这个题目,很多人会觉得我写我的java代码,至于类,JVM爱怎么加载就怎 ...

  5. java虚拟机类加载机制和双亲委派模型

    java虚拟机类加载机制:虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型. 类的生命周期是从类被加载到虚拟机内存中,到卸 ...

  6. 面试官,不要再问我“Java虚拟机类加载机制”了(转载)

    关于Java虚拟机类加载机制往往有两方面的 面试题:根据程序判断输出结果和讲讲虚拟机类加载机制的流程.其实这两类题本质上都是考察面试者对Java虚拟机类加载机制的了解. 面试题试水 现在有这样一道判断 ...

  7. 【转载】Java虚拟机类加载机制与案例分析

    出处:https://blog.csdn.net/u013256816/article/details/50829596 https://blog.csdn.net/u013256816/articl ...

  8. 作业6:Java虚拟机类加载机制

    一.概述 1.定义 虚拟机类加载机制:把类的数据从Class文件加载进内存,并对数据作校验.转换解析和初始化,最终形成可被JVM直接使用的Java类型. 2.与C/C++的不同 Java不在编译时进行 ...

  9. JVM(三)-java虚拟机类加载机制

    概述: 上一篇文章,介绍了java虚拟机的运行时区域,Java虚拟机根据不同的分工,把内存划分为各个不同的区域.在java程序中,最小的运行单元一般都是创建一个对象,然后调用对象的某个 方法.通过上一 ...

随机推荐

  1. 高通msm mdm 总结

    1. svn 获取工程代码命令:svn co svn+ssh://10.20.30.18/svn-repos/msm8916/branches/LA1.1-CS-r113502.2 2. 如何确定那些 ...

  2. elk系列5之syslog的模块使用【转】

    preface rsyslog是CentOs系统自带的的一个日志工具,那么我们就配置logstash来接受rsyslog的日志. logstash的syslog模块 linux-node2上操作log ...

  3. PHP用imageTtfText函数在图片上写入汉字

    https://blog.csdn.net/smstong/article/details/43955705 PHP绘图,imageString()这个函数并不支持汉字的绘制.这往往会给入门者当头一棒 ...

  4. 斐讯路由器L(联)B(壁)K-码兑换包安全下车通道(图文教程)

    大家好,最近大家比较关心的斐讯路由器如何下车问题,楼主亲自试提取了一遍,记录下过程,欢迎大家一起讨论. 言归正传,上图,上图! No.1 打开斐讯提供的良心k码退换通道: https://tech-s ...

  5. Springboot swagger2 导出api文档

    具体导出的代码,参考了:http://www.spring4all.com/article/699 导出前,首先需要配置好swagger2,参见 https://www.cnblogs.com/yan ...

  6. C/C++——C语言库函数大全

    本文转载自:https://blog.csdn.net/yanfan0916/article/details/6450442###; 1. 分类函数: ctype.h  int isalpha(int ...

  7. 连接数据库:ERROR:The server time zone value '?й???????' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration prop

    本打算在maven项目中配置mybatis试试看,想到mybatis如果不是在容器中运行,那么他的事务控制实际上可以使用的是jdbc的提交和回滚,这就要在pom.xml文件中配置mysql-conne ...

  8. 分布式跟踪系统zipkin+mysql

    1.初始化数据库: 1) CREATE TABLE IF NOT EXISTS zipkin_spans ( trace_id_high BIGINT NOT NULL DEFAULT 0 COMME ...

  9. 【58沈剑架构系列】lvs为何不能完全替代DNS轮询

    上一篇文章“一分钟了解负载均衡的一切”引起了不少同学的关注,评论中大家争论的比较多的一个技术点是接入层负载均衡技术,部分同学持这样的观点: 1)nginx前端加入lvs和keepalived可以替代“ ...

  10. git的使用总结【干货·转载】

    源文地址:https://juejin.im/post/5a54386af265da3e3b7a6317 摘抄: 版本树 / graph / network 干净简洁清晰 提交信息明确 易维护易读 举 ...