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

Java 加载过程

以下哪项不属于java加载过程?...加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,加载过程必须按照这种顺序按部就班地开始,而解析阶段则不一定:它在某些情况下可以在初始化阶段之后再开始,这是为了支持Java语言的运行时绑定(也称为动态绑定或晚期绑定...加载加载阶段(可以参考java.lang.ClassLoader的loadClass()方法),虚拟机需要完成以下3件事情: 通过一个的全限定名来获取定义此类的二进制字节流(并没有指明要从一个Class...初始化 初始化阶段是加载过程的最后一步,到了初始化阶段,才真正开始执行中定义的java程序代码。...在准备极端,变量已经付过一次系统要求的初始值,而在初始化阶段,则根据程序猿通过程序制定的主管计划去初始化变量和其他资源,或者说:初始化阶段是执行构造器()方法的过程.

65920

JAVA加载过程

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

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

java加载过程

java中,几乎所有的方法都是后期绑定的。     下面详细讲述加载过程中每个阶段所做的工作。...加载     加载加载过程的第一个阶段,在加载阶段,虚拟机需要完成以下三件事情:     1、通过一个的全限定名来获取其定义的二进制字节流。    ...加载阶段完成后,虚拟机外部的 二进制字节流就按照虚拟机所需的格式存储在方法区之中,而且在Java堆中也创建一个java.lang.Class的对象,这样便可以通过该对象访问方法区中的这些数据。...我们把每一层上面的加载器叫做当前层加载器的父加载器,当然,它们之间的父子关系并不是通过继承关系来实现的,而是使用组合关系来复用父加载器中的代码。...在准备阶段,变量已经被赋过一次系统要求的初始值,而在初始化阶段,则是根据程序员通过程序指定的主观计划去初始化变量和其他资源,或者可以从另一个角度来表达:初始化阶段是执行构造器()方法的过程

1.1K21

Java加载使用过程

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

70740

Java加载基本过程

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

45620

Java加载过程

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

28020

Java 15 - 加载过程

加载过程 加载过程包括加载, 验证, 准备, 解析, 初始化五个阶段. 加载 加载过程实现三个事: 通过的全限定名来获取定义此类的二进制字节流....元数据验证: 对字节码进行语义分析, 确保符合Java规范要求. 字节码验证: 对数据流和控制流分析, 确保程序语义是合法的, 符合逻辑的....符号引用验证: 对自身以外(常量池中的各种符号引用)的信息进行校验. 准备 准备阶段为变量分配内存并设置初始值, 使用的是方法区的内存....初始化 初始化阶段执行构造器()方法. 在准备阶段, 变量已经赋过一次初始值了, 而在初始化阶段, 根据程序制定的去初始化变量和其他资源....此方法不需要显式调用父构造器. 如果一个中不包含变量的赋值操作, 也不包含静态语句块, 那么编译器可以不为该类生成()方法.

35620

JAVA】聊聊加载过程

前言 Java 通过引入字节码和 JVM 机制,提供了强大的跨平台能力,理解 Java加载机制是深入 Java 开发的必要条件。 本篇博文的重点是,请介绍加载过程,什么是双亲委派模型?...概述 一般来说,我们把 Java加载过程分为三个主要步骤:加载、链接、初始化,具体行为在 Java 虚拟机规范里有非常详细的定义。...使用委派模型的目的是避免重复加载 Java 类型。   正文 首先,从架构角度,一起来看看 Java 8 以前各种类加载器的结构,下面是三种 Oracle JDK 内建的加载器。...该目录也可以通过设置 “java.ext.dirs” 来覆盖。...后记 以上就是 【JAVA】聊聊加载过程 的所有内容了; 梳理了一下加载过程,进行了相对全面的总结,希望对你有所帮助。

13120

VM的加载过程通过引导加载

通过此实例的 newInstance()方法就可以创建出该类的一个对象。 的生命周期 我们先来看下的生命周期,包括: 加载 连接 初始化 使用 卸载 其中加载、连接、初始化属于加载过程。...加载过程 JVM的加载过程通过引导加载器(bootstrap class loader)创建一个初始(initial class)来完成的,这个是由JVM的具体实现指定的。...下面我们来逐步解析 加载# 这里的加载是微观上的,是加载过程中的一小步,也是第一步,加载过程中的加载是宏观上的。...加载阶段我们可以用自定义加载器去控制字节流的获取方式,是非数组的可控性最强的阶段,而数组类型不通过加载器创建,它由 Java 虚拟机直接创建。 关于加载器是什么,后文再聊。...加载器# 三大加载器# 了解了加载过程后,我们来看看加载器。 加载器(ClassLoader)用来加载 Java Java 虚拟机中。

67830

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

加载过程Java程序需要使用某个时,如果该类还未被加载到内存中,JVM会通过加载、连接(验证、准备和解析)、初始化三个步骤来对该类进行初始化。...当Java程序需要使用某个时,如果该类还未被加载到内存中,Java虚拟机会通过加载、连接和初始化一个Java, 使该类可以被正在运行的Java程序所使用。...通过使用不同的加载器,可以从不同来源加载的二进制数据,通常有如下几种来源: 从本地文件系统加载class文件; 从一个ZIP、 JAR、 CAB或者其他某种归档文件中提取Java class文件,JDBC...编程时使用到的数据库驱动就是放在JAR文件中,JVM可以直接从JAR包中加载class文件; 通过网络加载class文件,这种场景最典型的应用就是 Applet; 把一个java源文件动态编译、并执行加载...如果有了直接引用, 那引用的目标必定已经在内存中存在 的初始化 初始化阶段是加载过程的最后一步 , 前面的几个阶段, 除了在加载阶段用户应用程序可以通过自定 义加载器參与之外, 其余动作完全由虚拟机主导和控制

67820

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

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

42730

java加载过程加载器的分析

我们知道,我们写的java代码保存的格式是 .javajava文件被编译后会转换为字节码,字节码可以在任何平台通过java虚拟机来运行,这也是java能够跨平台的原因。...最近在浏览一些博客时看到一些更为详细的讲解,如java加载过程,该博文有一万多的点击,但感觉还是讲得不够详细,说了加载过程有哪些,但没有详细的展开,说了一些初始化的细节。  ...希望大家看了之后更能理解JVM的工作原理和java的生产过程加载过程); 从被加载到虚拟机存中开始,到被卸载出内存为止,它的整个生命周期包括 加载 → 验证 → 准备 → 解析 → 初始化 ...→ 使用 → 卸载   7个部分、 下面我就来详细的说说每个部分的详细过程,再补充一下双亲委派模型。...再次之前我想补充一个名词解释,加载器:虚拟机把  实现 加载阶段中的“通过一个的全限定名来获取描述此类的二进制字节流” 这个过程的代码称为加载器 1.

1.5K80

java加载过程加载器的分析

最近在浏览一些博客时看到一些更为详细的讲解,如java加载过程,该博文有一万多的点击,但感觉还是讲得不够详细,说了加载过程有哪些,但没有详细的展开,说了一些初始化的细节。  ...希望大家看了之后更能理解JVM的工作原理和java的生产过程加载过程); 从被加载到虚拟机存中开始,到被卸载出内存为止,它的整个生命周期包括 加载 → 验证 → 准备 → 解析 → 初始化 ...→ 使用 → 卸载   7个部分、 下面我就来详细的说说每个部分的详细过程,再补充一下双亲委派模型。...再次之前我想补充一个名词解释,加载器:虚拟机把  实现 加载阶段中的“通过一个的全限定名来获取描述此类的二进制字节流” 这个过程的代码称为加载器 1....5.初始化 初始化阶段是加载过程中的最后一步,这才是执行中定义的java程序代码(也可以说是字节码)。

58750

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.的被动引用(不会发生的初始化) 当访问一个静态域时...,只有真正声明这个域的才会被初始化 通过子类引用父的静态变量,不会导致子类初始化 通过数组定义引用,不会触发此类的初始化 引用常量不会触发此类的初始化(常量在编译阶段就存入调用的常量池中了)

45140

【说站】java加载过程

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

23920

Java虚拟机--加载过程

上一篇:Java虚拟机--加载时机 加载的全过程包括:加载、验证、准备、解析和初始化。...加载: 在加载阶段,虚拟机需要完成3件事情: 通过一个的全限定名来获取定义此类的二进制字节流; 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构; 在内存中生成一个代表这个的Class对象...解析: 解析阶段是虚拟机将常量池中的符号引用替换为直接引用的过程。 符号引用:是以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能无歧义的定位到目标即可。...初始化: 在准备阶段,变量已经赋过一次系统要求的初始值,而在初始化阶段,则根据程序员通过程序制定的主观计划去初始化变量和其他资源。初始化阶段是执行构造器()方法的过程。...只要当父接口定义的变量被使用时才会执行父()方法。 虚拟机会保证一个的()方法在多线程下被正确的加锁、同步。

52780

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

加载过程 加载的五个过程加载、验证、准备、解析、初始化。 ? 加载加载阶段,虚拟机主要完成三件事: 通过一个的全限定名来获取定义此类的二进制字节流。...初始化 在准备阶段,变量已经经过一次初始化了,在这个阶段,则是通过程序制定的计划去初始化的变量和其他资源。这些资源有static{}块,构造函数,父的初始化等。...至于使用和卸载阶段阶段,这里不再过多说明,使用过程就是根据程序定义的行为执行,卸载由GC完成。...也可以通过System.out.println(System.getProperty("java.ext.dirs"))查看加载文件的路径。...如果没有,那必须先执行相应的加载过程。 2. 对象分配内存 对象所需内存的大小在加载完成后便完全确定(对象内存布局),为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。

1.3K31

JAVA加载过程&主动引用和被动引用

文章目录 1.java加载过程 1.1加载 1.2 链接 1.3 初始化 *说明 与方法 1.4 使用 1.5 卸载 2.被动引用和主动引用 2.1主动引用 2.1.1.遇到new、getstatic...2.1.2.使用java.lang.reflenct包的方法对进行放射调用,如果没有进行初始化,则需要触发其初始化。...2.2.3.常量在编译阶段会存入调用的常量池中,本质没有直接引用到定义的常量中,因此不会触发定义的常量初始化 2.3练习题 1.java加载过程 重新回顾了java的生命周期,主要有:加载...上述过程包括了一个java在jvm虚拟机中声明周期的全过程。 其中,加载、链接、初始化,称为加载过程。 而链接又包含了:验证、准备、解析等过程。见下图: ?...其实理解了加载过程也就不难理解,其过程如下: (1).执行链接过程,初始化所有的变量: instance -> null x -> 0 y -> 0 (2).执行初始化过程: new

95221
领券