Java虚拟机类加载机制--概述
一、虚拟机类概加载概述
虚拟机将描述类的Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以直接被虚拟机使用的Java类型
Java语言支持动态加载和动态连接。
二、虚拟机加载类的具体过程
1.类加载总的流程
加载-->连接(验证、准备、解析)-->初始化,需要注意的是每个阶段之间没有完全清晰的界限,通常是前一个阶段执行到某处,就会触发下
个阶段的执行。
2.类加载过程中各步骤的具体任务
加载阶段:需要完成3个任务。通过类名获得Class文件(注意:字节码文件的来源可以是任意的);将这个字节码文件代表的静态存储结构转换
为方法区的运行时数据结构;在Java堆中生成一个代表该类字节码文件的java.lang.Class文件的对象,该对象作为程序访问方法区数据的入口。
注意:方法区的数据结构由虚拟机自己定义,加载阶段与连接阶段的部分是交叉进行的。
验证:验证是连接的第一步,主要的目的是确保字节码文件中的信息符合虚拟机的要求,并且不会对虚拟机造成伤害。不同的虚拟机对字节码
文件的验证可能会不同,主要分为4部分的验证:
文件格式验证:检验字节码文件的格式规范,并且验证是否能被当前版本的虚拟机处理。只有完成这部分验证,字节码文件才能进入方法区,
后面3个部分的验证是基于方法区的验证。
元数据验证:对字节码的描述信息进行语义分析,确保描述信息符合Java语言规范。
字节码验证:是整个验证过程中最复杂的部分,主要是对数据流和控制流的验证,确保类的方法在运行的时候不会对虚拟机造成危害。
符号引用验证:这个阶段发生在虚拟机将符合引用转换为直接引用的过程中,这部分发生解析阶段。这个阶段的目的就是确保解析阶段
可以被正常的执行。
准备:目的是对所有的类变量--静态成员变量进行默认初始化。
解析:将虚拟机常量池中的符号引用转换为直接引用的过程。分为4类,类或接口的解析;字段的解析;类方法的解析、接口方法的解析
初始化:执行字节码文件定义的初始化。
三、类与类加载器
类加载器:其实就是一段代码用来实现类的加载,但是需要注意的是使用不同的类加载器加载,在堆中生成的Class对象是不相等的。
类加载器的分类:启动类加载器(属于JVM的一部分)、扩展类加载器、应用程序类加载器,以及自定义的类加载器。通常应用程序的加载都是由这3种
加载器配合一起完成类的加载。
类加载器的双亲委派模型:如果一个类加载器收到了类加载的亲求,先传给其上级的类加载器,看是否被加载过,每一级类加载器都是这样操作
上级类记载器没加载过,自己又不想加载的时候,下级类加载器才开始工作。注意:各级类加载器类之间的关系是组合关系,不是继承。
Java虚拟机类加载机制--概述的更多相关文章
- Java虚拟机类加载机制——案例分析
转载: Java虚拟机类加载机制--案例分析 在<Java虚拟机类加载机制>一文中详细阐述了类加载的过程,并举了几个例子进行了简要分析,在文章的最后留了一个悬念给各位,这里来揭开这个悬 ...
- 深入理解Java虚拟机---类加载机制(简略版)
类加载机制 谈起类加载机制,在这里说个题外话,当初本人在学了两三个月的Java后,只了解了一些皮毛知识,就屁颠屁颠得去附近学校的招聘会去蹭蹭面试经验,和HR聊了一会后开始了技术面试,前抛出了两个简单的 ...
- 面试官,不要再问我“Java虚拟机类加载机制”了
关于Java虚拟机类加载机制往往有两方面的面试题:根据程序判断输出结果和讲讲虚拟机类加载机制的流程.其实这两类题本质上都是考察面试者对Java虚拟机类加载机制的了解. 面试题试水 现在有这样一道判断程 ...
- [转]Java虚拟机类加载机制
原文地址:http://blog.csdn.net/u013256816/article/details/50829596 看到这个题目,很多人会觉得我写我的java代码,至于类,JVM爱怎么加载就怎 ...
- java虚拟机类加载机制和双亲委派模型
java虚拟机类加载机制:虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型. 类的生命周期是从类被加载到虚拟机内存中,到卸 ...
- 面试官,不要再问我“Java虚拟机类加载机制”了(转载)
关于Java虚拟机类加载机制往往有两方面的 面试题:根据程序判断输出结果和讲讲虚拟机类加载机制的流程.其实这两类题本质上都是考察面试者对Java虚拟机类加载机制的了解. 面试题试水 现在有这样一道判断 ...
- 【转载】Java虚拟机类加载机制与案例分析
出处:https://blog.csdn.net/u013256816/article/details/50829596 https://blog.csdn.net/u013256816/articl ...
- 作业6:Java虚拟机类加载机制
一.概述 1.定义 虚拟机类加载机制:把类的数据从Class文件加载进内存,并对数据作校验.转换解析和初始化,最终形成可被JVM直接使用的Java类型. 2.与C/C++的不同 Java不在编译时进行 ...
- JVM(三)-java虚拟机类加载机制
概述: 上一篇文章,介绍了java虚拟机的运行时区域,Java虚拟机根据不同的分工,把内存划分为各个不同的区域.在java程序中,最小的运行单元一般都是创建一个对象,然后调用对象的某个 方法.通过上一 ...
随机推荐
- jquery 生成二维码
jquery的二维码生成插件qrcode,在页面中调用该插件就能生成对应的二维码 <!DOCTYPE html> <html> <head> <meta ch ...
- 深入理解Spring系列之十:DispatcherServlet请求分发源码分析
转载 https://mp.weixin.qq.com/s/-kEjAeQFBYIGb0zRpST4UQ DispatcherServlet是SpringMVC的核心分发器,它实现了请求分发,是处理请 ...
- 64_t2
texlive-biblatex-chem-doc-svn42065-33.fc26.2.no..> 24-May-2017 15:44 1044190 texlive-biblatex-che ...
- VC RichEdit中英文关键字标红
最近需要做vc的RichEdit控件里的内容关键字标红,由于RichEdit的内容可能是中英文混合的,所以需要先转成Unicode,再用wcsstr函数找到关键字出现的位置,再用SetSel.SelS ...
- ireport报表制作, 当一个字段显示的数据太多时(数据过长),则需要自动换行
1.当一个字段显示的数据太长,一个表格放不下,则需要自动换行,选中要更改的表格(要显示动态内容的字段),设置属性Stretch with overflow 为钩选状态. 未勾选之前: 勾选之后: 2. ...
- STL中stack/queue/map以及Boost unordered_map 的使用方法
一.stackstack 模板类的定义在<stack>头文件中.stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要的,在不指定容器类型时,默认的容器类型 ...
- Go语言入门之指针的使用
指针的使用: package main import "fmt" func zhi(){ a:= var b *int=&a //声明指针并赋值 *b=3 //改变内存地址 ...
- yii2联表查询
我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_ ...
- 【PAT】1005. 继续(3n+1)猜想 (25)
1005. 继续(3n+1)猜想 (25) 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中 ...
- spring boot 扩展之AutoConfigurationImportListener
最近阅读spring boot源码时发现,发现当spring使用ConfigurationClassParser加载使用@Configuration注解类后,会使用AutoConfigurationI ...