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程序中,最小的运行单元一般都是创建一个对象,然后调用对象的某个 方法.通过上一 ...
随机推荐
- L - Looking for Taste Gym - 101991L 二进制枚举/思维
方法一:因为最多是10的六次方,所以可以直接枚举二进制上的每一位来得到最优结果. AC代码: #include<iostream> #include<stack> #inclu ...
- 购物车中的input输入框只能输入数字和输入为0的时候默认为1
<input type="text" value="1" onkeyup="value=(parseInt((value=value.repla ...
- Mac nginx 配置
nginx 安装: 在苹果系统下如果要安装nginx,首先要安装brew.安装brew可以查看网站:https://brew.sh: 一条命令即可搞定:/usr/bin/ruby -e "$ ...
- flask插件系列之flask_caching缓存
前言 为了尽量减少缓存穿透,同时减少web的响应时间,我们可以针对那些需要一定时间才能获取结果的函数和那些不需要频繁更新的视图函数提供缓存服务,可以在一定的时间内直接返回结果而不是每次都需要计算或者从 ...
- JS时间转换的一个坑位
在做项目的时候,无意发现了一个小东西. new Date('2018-05-15') new Date('2018-5-15') 输出的结果是不同的,相差了8小时.然后让我回忆到之前看的一个时间转换函 ...
- 清理oracle的用户中的日志垃圾以及修改sys用户的密码
清理oracle的用户中的日志垃圾1.进入:/opt/oracle/product/11g/network/admin目录2.注释掉listener.ora文件中的TRACE_LEVEL_LISTEN ...
- python中的pydoc
在终端上输入pydoc会显示以下信息 pydoc - the Python documentation tool pydoc <name> ... Show text documentat ...
- ECharts图表tooltip显示时超出canvas图层解决方法
我们在做ECharts图表的时候可能会遇到tooltip显示时超出了canvas图层范围,并且被其它z-index较高的div容器遮盖,这是悬浮展示信息就看不全,我们根据官网文档的配置项查询发现con ...
- C#子线程中更新ui-----c# 多线程多文件批量下载
c# 多线程多文件批量下载 废话少说,先演示一张效果图 简单说下过程喽 开发过程中其实总是会碰到项目想应用下载文件~ 看其他语言有很多封装好的类库可以使用~~ 作为小白的我并没有找到很多c#的案例 ...
- (二)Spring 之IOC 详解
第一节:spring ioc 简介 IOC(控制反转:Inversion of Control),又称作依赖注入dependency injection( DI ),是一种重要的面向对象编程的法则来削 ...