JVM类加载机制
一、概述
JVM把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是JVM的类加载机制
二、类加载过程
加载—(验证—准备—解析)(连接Linking)—初始化—使用—卸载
1、“加载”是“类加载”的第一个阶段,JVM需要完成以下3件事情:(1)通过一个类的全限定名来获取定义此类的二进制字节流;(2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构;(3)在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。
2、验证是连接阶段的第一步,目的:确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。
大致会完成4个阶段的验证动作:文件格式验证,元数据验证,字节码验证,符号引用验证。
3、准备 正式为类变量分配内存闭并设置类变量的初始化值得阶段。
4、解析 JVM将常量池内的符号引用替换为直接引用的过程。
5、初始化 真正开始执行类中定义的java程序代码(或者说是字节码)
类加载器
一个类在jvm中的唯一性由加载它的类加载器和这个类本身一同确立。换句话说就是,比较两个类是否相等,只有在这两个类是由同一个类加载器加载的前提下才有意义。
从java开发人员的角度来看,类加载器的划分为一下3种:
(1)启动类加载器
(2)扩展类加载器
(3)应用程序类加载器
类加载器的双亲委派模型:模型见下图。要求除了顶层的启动器外,其余的类加载器都应邮资机的父类加载器。过程:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的来加载器都是如此,因此所有的类加载请求最终都应该传送到顶层的启动类加载器,只有当父类加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)的时候,子加载器才会尝试自己去加载。
使用这种模型的好处:java类随着它的来加载器一起具备了一种带有优先级的层次关系,对于保证java程序的稳定运作很重要,代码集中在java.lang.ClassLoader的loadClass()方法中。

JVM类加载机制的更多相关文章
- JVM基础系列第7讲:JVM 类加载机制
当 Java 虚拟机将 Java 源码编译为字节码之后,虚拟机便可以将字节码读取进内存,从而进行解析.运行等整个过程,这个过程我们叫:Java 虚拟机的类加载机制.JVM 虚拟机执行 class 字节 ...
- JVM总结(四):JVM类加载机制
这一节我们来总结一下JVM类加载机制.具体目录如下: 类加载的过程 类加载过程概括 说说引用 详解类加载全过程: 加载 验证 准备 解析 初始化 虚拟机把描述类的数据从Class文件加载到内存,并对数 ...
- JVM 类加载机制详解
如下图所示,JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程. 加载 加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lan ...
- Java虚拟机(四):JVM类加载机制
1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构 ...
- JVM类加载机制详解(二)类加载器与双亲委派模型
在上一篇JVM类加载机制详解(一)JVM类加载过程中说到,类加载机制的第一个阶段加载做的工作有: 1.通过一个类的全限定名(包名与类名)来获取定义此类的二进制字节流(Class文件).而获取的方式,可 ...
- JVM类加载机制(转)
原文出自:http://www.cnblogs.com/ityouknow/p/5603287.html 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运 ...
- JVM类加载机制详解
引言 如下图所示,JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程. 加载 在加载阶段,虚拟机需要完成以下三件事情: 1)通过一个类的全限定名来获取定义此 ...
- Android动态加载--JVM 类加载机制
动态加载,本质上是通过JVM类加载机制将插件模块加载到宿主apk中,并通过android的相关运行机制,实现插件apk的运行.因此熟悉JVM类加载的机制非常重要. 类加载机制:虚拟机把描述类的数据从C ...
- Java虚拟机(五):JVM 类加载机制
一.JVM 类加载机制 JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程. 1. 加载: 加载是类加载过程中的第一个阶段,这个阶段会在内存中生成一个代表 ...
- 深入理解JVM虚拟机6:深入理解JVM类加载机制
深入理解JVM类加载机制 简述:虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 下面我们具体 ...
随机推荐
- JDBC-java访问数据库
定义:JDBC是一个独立于数据库管理系统的,通用的SQL数据库存取和操作的公共接口 (由JAVA类和接口组成,接口由各数据库厂家负责实现) 使用方法: 1.加载驱动 Class.forName(&qu ...
- 部署keepalive+lvs
部署keepalive+lvs 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎降入:高级运维工程师之路 598432640 安装LVS的步骤我已经在另外的一 ...
- android 消息机制
一.Android应用程序的主线程主要用于更新UI界面,并且主线程不能做耗时操作,否则会引起ANR:这种情况下需要开一个子线程来进行耗时操作,动作完成之后,子线程发消息给主线程通知其更新UI显示,常见 ...
- 运行nodejs的blog程序遇见问题
我是运行这个教程的代码.可以在网上找到相关视频和代码. 第一个问题,数据库中没有创建对应的表就开始运行程序.node app.js 这个错误问题大家可以去重现一下 第二个问题,我也没有看明白,但是我根 ...
- Dynamics AX 2012 R2 设置E-Mail
恰当地使用E-Mail,可以使系统看起来更专业,对用户更友好.AX中主要有两种发送E-Mail的方法:SMTP和MAPI. MAPI(Messaging Application Pro ...
- IOS Xcode7 新建PCH文件
第一步:新建文件找到iOS中的Othere点击PCH File 点击Next 第二步:修改文件名为当前工程名(一般与工程名同名),勾选Targets,点击create创建 第三步:如图选中红框中的路径 ...
- IOS new Date() 时间转换失败问题以及其他问题
一: ios下必须标准格式用'/'分割格式 转换没问题: new Date('2016/5/30 12:15:20') 二:ie9兼容模式以及以下ie版本 console用前需判断 if(windo ...
- Codeforce 567D
One-Dimensional Battle Ships time limit per test 1 second memory limit per test 256 megabytes input ...
- 【Spring】Spring的定时任务
> 参考的优秀文章 Task Execution and Scheduling > 版本说明 <dependencies> <dependency> <gro ...
- HTML新手向
一:[什么是HTML] HTML全名是Hyper Test Markup language,是超文本标记语言,用来创建和其他在网页浏览器中看到的信息(由排版语言演变而来)它是用来说明页面排版方式的标记 ...