JVM之类加载

类加载:将Class文件中的数据加载到内存,对数据校验,转化解析,初始化,最终形成可被虚拟机直接使用的Java类型

生命周期:加载-----验证------准备------解析----初始化------使用------卸载

类加载的过程包括了加载、验证、准备、解析、初始化五个阶段,解析阶段执行顺序不确定,可以在初始化阶段之后开始(支持动态绑定),这几个阶段按顺序开始,而不是进行或者完成,通常是交叉混合进行的,

加载:类加载器:   启动类加载器:Bootstrap ClassLoader,c++实现

          加载存放在JDK\jre\lib下无法被Java程序直接引用

         扩展类加载器:Extension ClassLoader:加载Java平台中拓展功能的Jar包,

            可以直接使用扩展类加载器

         应用程序类加载器:加载用户类路径(ClassPath)所指定的类,

      开发者可以直接使用该类加载器,一般情况下这个就是程序中默认的类加载器

                                         

双亲委派模型:当一个类收到类加载请求,将请求委派给父类加载器完成,每一层都是如此,最终所有加载请求传到最顶层的启动类加载器,当父类无法完成加载,交给子类加载,要加载类先检查是否已经加载,是不是自己应该加载的类。

好处:就是Java类随着它的类加载器(说白了,就是它所在的目录)一起具备了一种带有优先级的层次关系,保证了某个类在各种类加载器中都是同一个类,只被加载一次

验证:确保Class文件中的字节流包含的信息符合当前虚拟机的要求,包括文件格式,元数据,字节码,符号引用的验证

准备:正式为类变量分配内存并设置类变量初始值的阶段

解析:虚拟机将常量池中的符号引用转化为直接引用的过程

初始化:真正开始执行类中定义的Java程序代码

分派:静态分派:依赖静态类型来定位方法执行版本的分派动作,都称为静态分派 如方法重载

   动态分派:在运行期根据实际类型确定方法的指向版本 如方法重写

   单分派:方法的接收者和参数统称为方法字量,根据一个字量对目标方法选择

   多分派:根据多个字量对目标方法选择

Java是静多动单的语言

时间: 2024-10-10 16:44:25

JVM之类加载的相关文章

jvm之类加载器-《疯狂java讲义》

1. 类加载器简介 类加载器负责加载所有的类,系统为所有被载入内存中的类生成一个java.lang.Class实例.一旦一个类被载入JVM中,同一个类就不会被再次载入了.现在的问题是怎么样才算“同一个类”?正如一个对象有一个唯一的标识一样,一个载入JVM的类也有一个唯一的标识. 同理,载入JVM的类也有一个唯一的标识,在java中,一个类用其全限定类名(包括包名和类名)作为标识.但在JVM中,一个类用其全限定类名和其类加载器作为其唯一的标识.因此,如果在pg包中,有一个名为Person的类,被类

深入JVM之类加载机制

JVM系列 1.深入JVM之源码编译机制 2.深入JVM之类加载机制 3.深入JVM之类执行机制 4.JVM内存诊断工具 总结下类加载机制相关的知识图谱. 转载请注明出处:http://blog.csdn.net/supera_li/article/details/45747329 类加载机制,包括三大步骤. 1.装载load .目的是生成类加载实例id 2.链接 ,检测字节码格式以及内部调用匹配情况.静态变量初始化 3.初始化.主要是类加载器加载类的顺序. 对于自定义类加载,开发者完成自己的实

JVM自定义类加载器加载指定classPath下的所有class及jar

一.JVM中的类加载器类型 从Java虚拟机的角度讲,只有两种不同的类加载器:启动类加载器和其他类加载器. 1.启动类加载器(Boostrap ClassLoader):这个是由c++实现的,主要负责JAVA_HOME/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作. 2.其他类加载器:由java实现,可以在方法区找到其Class对象.这里又细分为几个加载器 a).扩展类加载器(Extension ClassLoader):负责用于加载JAVA_HOM

JVM之类加载机制

JVM之类加载机制 JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程. 类加载五部分 加载 加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的入口.注意这里不一定非得要从一个Class文件获取,这里既可以从ZIP包中读取(比如从jar包和war包中读取),也可以在运行时计算生成(动态代理),也可以由其它文件生成(比如将JSP文件转换成对应的Class类). 验证 这一阶

JVM的类加载

一.基本类加载机制介绍 大体引用一下<深入理解Java虚拟机>一书中对类加载的定义:虚拟机将描述类的二进制字节流(即Class文件)加载到内存中,并对其进行验证.准备.解析.初始化,最终 生成可以直接被虚拟机使用的Java类型(即已经校验合格且有clinit执行完clinit方法的Class对象),这就是JVM的类加载机制. 一个好的定义,就应该是这样准确而简练的.下面先罗列一下类的生命周期: 加载  ->  验证  ->  准备 ->  解析  ->  初始化  -&

深入理解JVM之类加载

---title: [学习]深入理解JVM之类加载.mddate: 2019-10-20 22:20:06tags: JVM 类加载--- Java类的加载,连接,初始化都是在程序运行期间执行的 ## Java 虚拟机与程序的生命周期 1. 执行 System.exit()方法2. 程序正常结束3. 遇到异常或错误终止4. 由于操作系统或程序虚拟机进程错误 以上的情况都可以结束生命周期 ## Java 类加载的方式 1. 本地系统直接加载2. 通过网络下载.class 文件3. 通过zip,ja

漫谈JVM之类加载机制(篇一)

前言 最近在看一本书,发现代码里用到了Thread.currentThread().getContextClassLoader(),为什么类加载器还与线程有关系呢,为什么不直接使用ClassLoader.getSystemClassLoader()呢?带着这些疑问又把JVM类加载机制从头到尾学习了一遍. 篇一 类加载时机 我们编写的代码存储在java文件中,java源代码通过编译生成Java虚拟机可识别的字节码,存储在Class文件中.运行java程序时需要将Class文件中的信息加载到Java

JVM的类加载机制

虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 类加载的过程: 包括加载.链接(含验证.准备.解析).初始化 如下图所示: 1.加载: 类加载指的是将类的class文件读入内存,并为之创建一个java.lang.Class对象,作为方法区这个类的数据访问的入口. 也就是说,当程序中使用任何类时,系统都会为之建立一个java.lang.Class对象.具体包括以下三个部分: (1)通过类的全

jvm自定义类加载器

除了自定义的类加载之外,jvm存在三种类加载器,并以一种父委托的加载机制进行加载. --启动类加载器,又称根加载器,是一个native的方法,使用c++实现.在java中我们用null标识,用于加载jdk自带的类. --扩展类加载器,用于加载jdk扩展类 --系统类加载器,用于加载classpath目录下的类 上面提到的三种类加载器,是存在父子关系,即系统类加载器会委托extension加载器,如果extension加载器不能加载该类的话,再由系统类加载器进行加载.注意这里所说的父子关系不是指继

JVM之类加载器

一.首先,小小测试,看是否已经掌握了JVM类加载的过程 1.1.测试一: class Singleton { private static Singleton sin = new Singleton(); public static int counter1; public static int counter2 = 0; private Singleton() { counter1++; counter2++; } public static Singleton getInstance() {