Java类加载机制以及双亲委派模型】的更多相关文章

一.Java类加载机制 1.概述 Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能. 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 2.工作机制 类装载器就是寻找类的字节码文件,并构造出类在JVM内部表示…
一.类的生命周期 加载(Loading).验证(Verification).准备(Preparation).解析(Resolution).初始化(Initialization).使用(Using).卸载(Unloading) 七个阶段,加载(装载).验证.准备.初始化和卸载这五个阶段顺序是固定的,类的加载过程必须按照这种顺序开始 验证.准备.解析统称为连接阶段.连接阶段主要的目的是确保class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟 机自身安全. 1.1.加载: 1.通过…
我们都知道以 .java 结尾的 Java 源文件,经过编译之后会变成 .class 结尾的字节码文件.JVM 通过类加载器来加载字节码文件,然后再执行程序. 什么时候加载一个类 那么,什么时候类加载器会加载一个类呢?用到这个类的时候,JVM的类加载器就会加载这个类.用到这两个字说起来很抽象,我用代码和图例来说明. 有下面这样一段代码,一个类EmergencyPlan,里面有一个main()函数,main()函数做的事情是创建了一个 Account 对象. public class Emerge…
java虚拟机类加载机制:虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型. 类的生命周期是从类被加载到虚拟机内存中,到卸载出内存为止: 类的生命周期: 加载 loading . 验证 verification. 准备 preparation. 解析 resolution. 初始化 initialization. 使用 using. 卸载 unloading 类加载器的层次结构: 双亲委派模型过程: 某个特定的类加载器…
一. 类加载器 ClassLoader即常说的类加载器,其功能是用于从Class文件加载所需的类,主要场景用于热部署.代码热替换等场景. 系统提供3种的类加载器:Bootstrap ClassLoader.Extension ClassLoader.Application ClassLoader 1.1 Bootstrap ClassLoader 启动类加载器,一般由C++实现,是虚拟机的一部分.该类加载器主要职责是将JAVA_HOME路径下的\lib目录中能被虚拟机识别的类库(比如rt.jar…
类与类加载器 虚拟机设计团队把类加载阶段的"通过一个类的全限定名来获取此类的二进制字节流"这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现这个动作的代码模块称为"类加载器".类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用却远远不限定于类加载阶段.对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间.这句话表达地再简单一点就是:比较…
一.类文件的结构 我们都知道,各种不同平台的虚拟机,都支持 "字节码 Byte Code" 这种程序存储格式,这构成了 Java 平台无关性的基石.甚至现在平台无关性也开始演变出 "语言无关性" ,就是其他语言也可以运行在 Java 虚拟机之上,比如现在的 Kotlin.Scala 等. 实现语言无关性的基础仍然是虚拟机和字节码存储格式,Java 虚拟机步包括 Java 语言在内的任何语言绑定,他只和 "Class 文件" 这种特定的二进制文件格…
其实,双亲委派模型并不复杂.自定义类加载器也不难!随便从网上搜一下就能搜出一大把结果,然后copy一下就能用.但是,如果每次想自定义类加载器就必须搜一遍别人的文章,然后复制,这样显然不行.可是自定义类加载器又不经常用,时间久了容易忘记.相信你经常会记不太清loadClass.findClass.defineClass这些函数我到底应该重写哪一个?它们主要是做什么的?本文大致分析了各个函数的流程,目的就是让你看完之后,难以忘记!或者说,延长你对自定义类加载器的记忆时间!随时随地想自定义就自定义!…
虚拟机把类加载阶段中“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到虚拟机外部去实现,以便让程序自己决定如何去获取所需要的类.实现这个动作的代码模块称为“类加载器”. 类与类加载器 任意一个类,都需要由加载它的类加载器和这个类本身共同确定其在Java 虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间.这句话可以表达的更通俗一些:比较两个类是否相等,只有在这两个类是同一个类加载器加载的前提下才意义. 这里的“相等”,包括代表类的 Class 对象的equals() 方法…
原文链接:http://blog.csdn.net/u011080472/article/details/51332866,http://www.cnblogs.com/lanxuezaipiao/p/4138511.html 加载类的开放性 类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因.在类加载的第一阶段"加载"过程中,需要通过一个类的全限定名来获取定义此类的二进制字节流,完成这个动作的代码块就是类加载器.这一动作是放在Java虚拟机外部…