首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JAVA类加载过程

一、什么是类的加载 在介绍类的加载机制之前,先来看看,类的加载机制在整个 java 程序运行期间处于一个什么环节,下面使用一张图来表示: 1.png 从上图可以看,java 文件通过编译器变成了.class...首先看的就是类加载机制的过程。 二、类加载的过程 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。...它们的顺序如下图所示: 2.png 其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。...下面就一个一个去分析一下这几个过程 1、加载 ”加载“是”类加机制”的第一个过程,在加载阶段,虚拟机主要完成三件事: (1)通过一个类的全限定名来获取其定义的二进制字节流 (2)将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构...,则其父 类 也 会 被 初 始 化 Java 虚 拟 机 启 动 时 被 标 明 为 启 动 类 的 类 ( JavaTest),直接使用 java.exe 命令来运行某个主类好了,到目前为止就是类加载机制的整个过程

58174

Java 类加载过程

以下哪项不属于java类加载过程?...A.生成java.lang.Class对象 B.int类型对象成员变量赋予默认值 C.执行static块代码 D.类方法解析 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载...加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始,而解析阶段则不一定:它在某些情况下可以在初始化阶段之后再开始,这是为了支持Java语言的运行时绑定(也称为动态绑定或晚期绑定...加载 在加载阶段(可以参考java.lang.ClassLoader的loadClass()方法),虚拟机需要完成以下3件事情: 通过一个类的全限定名来获取定义此类的二进制字节流(并没有指明要从一个Class...初始化 类初始化阶段是类加载过程的最后一步,到了初始化阶段,才真正开始执行类中定义的java程序代码。

67320
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    java类加载过程

    其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。...在java中,几乎所有的方法都是后期绑定的。     下面详细讲述类加载过程中每个阶段所做的工作。...加载     加载时类加载过程的第一个阶段,在加载阶段,虚拟机需要完成以下三件事情:     1、通过一个类的全限定名来获取其定义的二进制字节流。    ...4、接口方法解析:与类方法解析步骤类似,知识接口不会有父类,因此,只递归向上搜索父接口就行了。 初始化 初始化是类加载过程的最后一步,到了此阶段,才真正开始执行类中定义的Java程序代码。...总结     整个类加载过程中,除了在加载阶段用户应用程序可以自定义类加载器参与之外,其余所有的动作完全由虚拟机主导和控制。

    1.1K21

    Java类加载基本过程

    基本过程: 根据类的全限定名称加载定义类的二进制字节流。...将字节流代表的静态存储结构转化为方法区的运行时数据结构 内存中生成一个代表这个类的java.lang.Class对象,作为方法去这个类的各种数据访问入口 数组类本身不通过类加载器创建,由java...虚拟机直接创建,数组类的元素类型由类加载器加载。...解析:虚拟机将常量池中的符号引用替换为直接引用过程 CONSTANT_Class_info,CONSTANT_Fieldref_info,CONSTANT_Methodref_info.....直接引用:直接指向目标的指针,偏移量或间接定位到目标的句柄,和虚拟机实现的内存相关,直接引用相关的目标对象必须已加载。 。。。 初始化:开始执行类定义中的Java程序代码。

    47120

    【Java】类的加载过程

    类的加载过程 类的加载过程又分为三个步骤: 过程1:类的装载(Loading) 将类的class文件读入内存,并为之创建一个java.lang.Class的实例对象,此过程由类加载器(负责类的加载,对应一个...过程2:链接(Linking) 验证(Verify):确保加载的类的信息符合JVM规范,例如:每一个class文件都以cafebabe开头,没有安全方面的问题。...准备(Prepare):正式为类中的(static)静态变量分配内存,并设置默认初始化值的阶段。这些内存都在方法区中进行分配。...解析(Resolve):虚拟机常量池内得符号引用(常量名)替换为直接引用(地址)的过程。 过程3:初始化(initialization) 执行类构造器方法的过程。...执行所有类中(static)静态变量和(static)静态代码块中的语句的赋值动作,这些操作都在方法中进行。 因为类的加载过程中还没有对象的存在,因而赋值操作也只能是对静态变量进行。

    29820

    【JAVA】聊聊类加载过程

    前言 Java 通过引入字节码和 JVM 机制,提供了强大的跨平台能力,理解 Java 的类加载机制是深入 Java 开发的必要条件。 本篇博文的重点是,请介绍类加载过程,什么是双亲委派模型?...概述 一般来说,我们把 Java 的类加载过程分为三个主要步骤:加载、链接、初始化,具体行为在 Java 虚拟机规范里有非常详细的定义。...加载阶段是用户参与的阶段,我们可以自定义类加载器,去实现自己的类加载过程。 第二阶段是链接(Linking),这是核心的步骤,简单说是把原始的类定义信息平滑地转化入 JVM 运行的过程中。...使用委派模型的目的是避免重复加载 Java 类型。   正文 首先,从架构角度,一起来看看 Java 8 以前各种类加载器的结构,下面是三种 Oracle JDK 内建的类加载器。...后记 以上就是 【JAVA】聊聊类加载过程 的所有内容了; 梳理了一下类加载的过程,进行了相对全面的总结,希望对你有所帮助。

    14920

    Java 15 - 类加载过程

    类加载过程 类的加载过程包括加载, 验证, 准备, 解析, 初始化五个阶段. 加载 加载过程实现三个事: 通过类的全限定名来获取定义此类的二进制字节流....元数据验证: 对字节码进行语义分析, 确保符合Java规范要求. 字节码验证: 对数据流和控制流分析, 确保程序语义是合法的, 符合逻辑的....初始化 初始化阶段执行类构造器()方法. 在准备阶段, 类变量已经赋过一次初始值了, 而在初始化阶段, 根据程序制定的去初始化类变量和其他资源....()有一下特点: 此方法由编译器自动收集类中所有类变量的赋值动作和静态语句块中的语句合并产生. 静态语句块只能访问到定义在它之前的类变量, 定义在它之后的只能赋值, 不能访问....此方法不需要显式调用父类构造器. 如果一个类中不包含类变量的赋值操作, 也不包含静态语句块, 那么编译器可以不为该类生成()方法.

    36920

    Java 类机制(2)---- 类加载过程

    文章目录 前言 类加载过程 ClassLoader 双亲委派模型 Java 提供的类加载器 URLClassLoader 数组类的加载和被动引用 前言 大家好,在该专栏的上一篇文章中我们介绍了一下关于...当我们调用 java Main 命令时,会执行这个类中的 main(Stirng[] args) 方法,在这个过程中首先会创建一个虚拟机进程,然后虚拟机会寻找并加载 Main 类,在加载完成后执行其 main...类加载过程 要加载一个类,先得找到这个类,因此在上面的命令行中我们先进入了 Main.class 文件所在的目录,然后调用 java Main 命令,这样虚拟机就会在当前目录下寻找名为 Main 的 class..."C:\Users\MAIBENBEN\Desktop\blog\Java常用技术\Java 类机制(2)----类加载过程" Main 命令。...\Desktop\blog\Java常用技术\Java 类机制(2)----类加载过程"。

    65720

    java类加载的过程 父_类加载机制原理

    (b)准备:给类的静态变量分配存储空间 (c)解析:将符号引用转成直接引用 3、初始化:对静态变量,静态代码块执行初始化工作 类的加载过程 当Java程序需要使用某个类时,如果该类还未被加载到内存中,...加载、 验证、准备和初始化这四个阶段的顺序是确定的,类的加载过程必须按照这种顺序接部就班地开始,而解析则不一定: 它在某些情况下可以在初始化阶段之后再开始, 这是为了支持 Java语言的运行时绑定 (也称为动态绑定或晩期绑定...除此之外,所有引用类的方式都不会触发初始化, 称为被动引用。 类的加载 加载是类加载过程的一个阶段,这两个概念一定不要混淆。...如果有了直接引用, 那引用的目标必定已经在内存中存在 类的初始化 初始化阶段是类加载过程的最后一步 , 前面的几个阶段, 除了在加载阶段用户应用程序可以通过自定 义类加载器參与之外, 其余动作完全由虚拟机主导和控制...到了初始化阶段, 才真正开始执行类中定义的 Java程序代码。从代码角度,初始化阶段是执行类构造器()方法的过程。

    71520

    java类加载过程详解_java三个类加载器

    朋友给我发了一道有意思的题目,如下 为什么用.class的方式加载类和以Class.forName()的方式加载的结果不同呢,原因很简单,就是类加载过程的不同。...这就扯到基础理解上了,就是Java是如何加载一个类的呢? 上图是我绘制的整个Java类加载过程。...首先是编译期,将Java源文件也就是敲好的代码通过编译,转换成.class文件,也就是字节码文件(byte),然后经过传输传给类加载器,传输的是刚转换好的字节码文件,也可以是通过网络传输过来的字节码文件...然后就是运行期,运行期一开始,类加载器初始化字节码文件,通过本地类库来验证字节码文件的正确性,然后交给JVM的解释器和即时编译器,最后汇合给JVM内部的Java运行系统,都ok了后传给PC的操作系统,最后就是物理硬件层面...所以问题的答案就有了 .class是JVM将类装入内存,是在编译期间实现的,而编译期间只是做了字节码转换,所以不执行静态块 而class.forName()除了将类的.class文件加载到jvm中之外

    44230

    深入解读Java类加载过程

    类加载过程1.加载1.通过全类限定名获取此类的二进制字节流。2.将此字节流所代表的静态存储结构转化为方法区中的运行时数据结构。...从加密文件获取额外讲一下数组与非数组对象在加载中的区别。 数组对象不通过Class文件生成,由JVM自动生生成。若是引用类型如String[]则通过类加载器加载元素类。...验证原理:在字节码的执行过程中,虚拟机会根据字节码操作调整栈帧的状态,例如iload会从局部变量表加载一个int值并压入操作数栈;iadd操作会从操作数栈弹出两个int值并执行加法运算。...3.准备 将静态变量(static)分配内存并设置类变量初始值。设0,设null。如果被final修饰,在编译时就会直接赋值。4.解析 将常量池中的符号引用转化为直接引用的过程。...1.类或接口的解析 2.字段解析 3.方法解析 4.接口方法解析5.初始化 类加载的最后一个阶段。直接来说就是执行类构造器方法()的过程。

    4500

    java类的加载过程和类加载器的分析

    最近在浏览一些博客时看到一些更为详细的讲解,如java类加载全过程,该博文有一万多的点击,但感觉还是讲得不够详细,说了类的加载过程有哪些,但没有详细的展开,说了一些类初始化的细节。  ...希望大家看了之后更能理解JVM的工作原理和java类的生产过程(类加载的过程); 类从被加载到虚拟机类存中开始,到被卸载出内存为止,它的整个生命周期包括 加载 → 验证 → 准备 → 解析 → 初始化 ...加载 加载只是类加载过程的一个阶段而已,但往往被大家弄成了这就是类的加载过程,所以才有了博文开头时同学给我的那个回答; 希望大家不要混淆出这个很相似的名词,从而对类加载有所误读。...5.初始化 类初始化阶段是类加载过程中的最后一步,这才是执行类中定义的java程序代码(也可以说是字节码)。...Java虚拟机没有严格约束什么时候开始类加载过程的第一阶段,但严格规定了有且只有5钟情况必须立即马上光速对类进行 初始化  当然加载、验证、准备需要在次之前,(解析也可以在初始化以后再开始~) 1.遇到

    1.5K80

    java类的加载过程和类加载器的分析

    最近在浏览一些博客时看到一些更为详细的讲解,如java类加载全过程,该博文有一万多的点击,但感觉还是讲得不够详细,说了类的加载过程有哪些,但没有详细的展开,说了一些类初始化的细节。  ...希望大家看了之后更能理解JVM的工作原理和java类的生产过程(类加载的过程); 类从被加载到虚拟机类存中开始,到被卸载出内存为止,它的整个生命周期包括 加载 → 验证 → 准备 → 解析 → 初始化 ...加载 加载只是类加载过程的一个阶段而已,但往往被大家弄成了这就是类的加载过程,所以才有了博文开头时同学给我的那个回答; 希望大家不要混淆出这个很相似的名词,从而对类加载有所误读。...5.初始化 类初始化阶段是类加载过程中的最后一步,这才是执行类中定义的java程序代码(也可以说是字节码)。...Java虚拟机没有严格约束什么时候开始类加载过程的第一阶段,但严格规定了有且只有5钟情况必须立即马上光速对类进行 初始化  当然加载、验证、准备需要在次之前,(解析也可以在初始化以后再开始~) 1.遇到

    60350

    类加载过程

    类的生命周期 类加载过程 加载 验证 准备 解析 初始化 卸载 类的生命周期 一个类的完整生命周期如下: 类加载过程 Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些...系统加载 Class 类型的文件主要三步:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。...数组类型不通过类加载器创建,它由 Java 虚拟机直接创建。 类加载器、双亲委派模型也是非常重要的知识点,这部分内容会在后面的文章中单独介绍到。...基本数据类型的零值 : (图片来自《深入理解 Java 虚拟机》第 3 版 7.33 ) 解析 解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程。...初始化 初始化阶段是执行初始化方法 ()方法的过程,是类加载的最后一步,这一步 JVM 才开始真正执行类中定义的 Java 程序代码(字节码)。

    60620

    类加载过程

    类的生命周期 加载->连接->初始化->使用->卸载 其中连接包括:验证->准备->解析 类加载过程 Class文件需要加载到虚拟机之后才能运行。...加载和连接阶段的部分阶段是可以交叉执行的,加载阶段尚未结束,连接过程可能就开始了。 验证 文件格式验证。 元数据验证。 字节码验证。 符号引用验证。 准备 准备阶段为类变量分配内存并赋初始值的过程。...1.内存分配过程中只分配类变量(被static修饰的变量,类实例变量在类实例化的时候一起被分配在堆中)。 2.从概念上讲类变量被分配在方法区,在JDK7之前没有问题。...Java虚拟机为每个类都准备了一张方法表来存放类中所有方法,当需要调用一个方法的时候只需要知道该方法在方法表中的偏移量即可。...初始化 初始化阶段是执行()的过程,是类加载的最后一步,在这一步JVM才开始执行字节码。

    40510

    【说站】java类加载的过程

    java类加载的过程 说明 当程序主动使用某个类时,如果该类还未被加载到内存中,则系统会通过以下三个步骤对该类进行初始化。...类加载步骤 1、加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的 java.lang.Class 对象,作为方法区中类数据的访问入口。...2、链接:将Java类的二进制代码合并到JVM的运行状态之中的过程。 3、执行类构造器 () 方法的过程。...(){ m = 300; m = 100; } */ 以上就是java类加载的过程,希望对大家有所帮助。...更多Java学习指路:Java基础 本教程操作环境:windows7系统、java10版,DELL G3电脑。

    24620

    Java虚拟机--类加载过程

    上一篇:Java虚拟机--类加载时机 类加载的全过程包括:加载、验证、准备、解析和初始化。...加载: 在加载阶段,虚拟机需要完成3件事情: 通过一个类的全限定名来获取定义此类的二进制字节流; 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构; 在内存中生成一个代表这个类的Class对象...元数据验证: 对字节码描述信息进行语义分析,保证其描述的信息符合Java语言规范: 这个类是否有父类; 这个类的父类是否继承了不被允许继承的类(final类); 如果这个类不是抽象类,是否实现了其父类和接口中要求的所有方法...实例变量将会在对象实例化时随对象一起分配在Java堆中; 这里的初始值”通常情况“下一般指零值,程序员指定的值在初始化阶段才会生效; 特殊情况是:当一个变量被final修饰,那么准备阶段该变量就会被初始化为指定的值...初始化: 在准备阶段,变量已经赋过一次系统要求的初始值,而在初始化阶段,则根据程序员通过程序制定的主观计划去初始化类变量和其他资源。初始化阶段是执行类构造器()方法的过程。

    54380

    Java类加载到类使用全过程

    前言 上篇我们说到为了减少Activity类加载的过程,所以可以预创建Activity。 有的朋友就问我,类加载,类实例化到底是怎样一个过程,为什么预加载一次就能减少下次加载的时间呢?...类加载阶段 类的加载主要有三步: 将class文件字节码内容加载到内存中。 并将这些静态数据转换成方法区中的运行时数据结构。 在堆中生成一个代表这个类的java.lang.Class对象。...类加载器种类 类加载器种类主要有四种: BootstrapClassLoader:启动类加载器,使用C++实现 ExtClassLoader:扩展类加载器,使用Java实现 AppClassLoader...类加载过程(双亲委派机制) 类加载的过程可以用一句话概括: 先在方法区找class信息,有的话直接调用,没有的话则使用类加载器加载到方法区。...如果Bootstrap ClassLoader加载失败(在JAVA_HOME>\lib中未找到所需类),就会让Extension ClassLoader尝试加载。

    73940

    JAVA JVM类加载过程的学习

    学习资料链接:https://www.bilibili.com/video/av30023103/ 链接 将JAVA类的二进制代码合并到JVM的运行状态之中的过程 1.验证: 确保加载的类信息符合JVM...3.解析: 虚拟机常量池内的符号引用替换为直接引用的过程。 初始化 1.初始化阶段实质性类构造器()方法的过程。...类加载全过程 1.类的主动引用(一定会发生类的初始化) new一个类的对象 调用类的静态成员(除了final常量)和静态方法 使用java.lang.reflect包的方法对类进行反射调用 当虚拟机启动...,java XXX,则一定会初始化XXX类,说白了就是先启动main方法所在的类 当初始化一个类,如果其父类没有被初始化,则先会初始化他的父类 2.类的被动引用(不会发生类的初始化) 当访问一个静态域时..."); } } 实验结果: image.png 补充:JAVA内存分析详解--笔记 https://cloud.tencent.com/developer/article/1482417

    46640
    领券