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

JAVA加载过程

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

56174

Java 加载过程

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

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

java加载过程

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

1K21

Java加载基本过程

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

44220

Java加载过程

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

27420

Java 15 - 加载过程

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

35020

JAVA】聊聊加载过程

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

11920

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)----加载过程"。

62320

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

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

66320

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

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

42030

java加载过程加载器的分析

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

1.5K80

java加载过程加载器的分析

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

57850

加载过程

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

56020

加载过程

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

37710

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

43840

Java虚拟机--加载过程

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

52080

【说站】java加载过程

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

22520

Java加载使用全过程

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

69240

Java加载及对象创建过程详解

加载过程 加载的五个过程加载、验证、准备、解析、初始化。 ? 加载加载阶段,虚拟机主要完成三件事: 通过一个的全限定名来获取定义此类的二进制字节流。...AppClassLoader的父加载器为ExtClassLoader,ExtClassLoader的父加载器为null,BoopStrap ClassLoader为顶级加载器 工作过程 如果一个加载器收到了加载的请求...到自己指定的加载路径下(java.ext.dirs)查看。...双亲委派的好处 Java随着它的加载器一起具备了一种带有优先级的层次关系。...如果没有,那必须先执行相应的加载过程。 2. 对象分配内存 对象所需内存的大小在加载完成后便完全确定(对象内存布局),为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。

1.2K31
领券