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

Java加载-加载

这就是虚拟机的加载加载概念 ? 上图是加载和卸载的整个过程示意图,其中验证、准备、解析统称为连接阶段。...加载-加载阶段 加载加载的第一个阶段,加载阶段的主要目标是: 通过一个的全限定名来获取定义此类的二进制字节流 将字节流的静态信息结构转换为方法区(元数据区)的运行时数据结构 在内存中生成一个代表这个的...非数组加载需要通过加载器实现,既可以使用系统的提供的引导加载,也可以使用用户自定义的加载器去完成,关于加载器后续我会单独写一篇文章来介绍,并且实现我们自己的一个加载器。...对于数组来说,数组是由Java虚拟机直接创建的,但是数组中的元素类型需要通过加载加载。数组的可见性与数组中元素的可见性一致,如果元素不是引用类型,数组的可见性将默认为public。...本期加载加载阶段就介绍到这,下期我们会讲解加载的连接阶段,我们下期再见!!!

1.3K40

加载

加载器并不需要等到某个被"首次主动使用"时再加载它,JVM规范规定JVM可以预测加载某一个,如果这个出错,但是应用程序没有调用这个, JVM也不会报错;如果调用这个的话,JVM才会报错,(LinkAgeError...加载机制 全盘负责,当一个加载器负责加载某个Class时,该Class所依赖的和引用的其他Class也将由该类加载器负责载入,除非显示使用另外一个加载器来载入 双亲委托,先让父加载器试图加载该类,...,每一个层次的加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动加载器中,只有当父加载器反馈自己无法完成加载请求(它管理的范围之中没有这个)时,子加载器才会尝试着自己去加载 ?...当AppClassLoader加载一个class时,它首先不会自己去尝试加载这个,而是把加载请求委派给父加载器ExtClassLoader去完成。...自定义加载器 既然JVM已经提供了默认的加载器,为什么还要定义自已的加载器呢?

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

加载

也就是class文件被加载到虚拟机内存开始,到卸载出内存为止。它将要执行以下7个步骤: 加载 验证 准备 解析 初始化 使用 卸载 ? 下面我们看一下每一个阶段的详细流程。...加载 加载也就是把class文件加载到虚拟机内存中。在加载时虚拟机需要完成3个方面的工作: 通过一个的全限定名来获取的二进制字节流。 将字节流所代表的静态存储结构转化为方法区中的运行时数据结构。...在内存中生成一个代表这个的java.lang.Class对象。...字节码验证:这个阶段是最复杂的也是最耗时的验证,它主要目的是对的方法体进行验证,校验中的方法在运行时,不会做出威胁虚拟机的安全事件。...在解析时主要分为下面的几种: 或接口的解析 字段解析 方法解析 接口方法解析 初始化 初始化阶段主要的目的是为静态变量或者静态代码块执行赋值的操作。

47230

【Android 逆向】加载器 ClassLoader ( 启动加载器 | 扩展加载器 | 应用加载器 | 加载的双亲委托机制 )

文章目录 一、加载器 二、加载的双亲委托机制 一、加载器 ---- Java 虚拟机 ClassLoader 加载器 : Bootstrap ClassLoader : 启动加载器 , 该 加载器由...C/C++ 实现 , 加载 Java 的核心库 , 如 java.lang 包下的系统 ; Java 中无法和获取 ; Extention ClassLoader : 扩展加载器 , 加载 /lib...; 加载的双亲委托机制 : 加载器 ClassLoader 接收到 加载任务 之后 , 自己不会先进行加载 , 反而将该 加载任务 委托 给 父加载器 执行 ; 父加载器 接收 到 该...ClassLoader 完成了 加载 操作 , 返回加载 ; 如果 启动加载器 Bootstrap ClassLoader 无法完成 加载 操作 , 就会 将 加载任务 委托给 子类完成...; 同理 , 父 委托 给子类的 加载任务 , 如果 子类加载器 可以完成加载 , 成功返回 , 如果子类加载器无法完成加载 , 就再次 将 加载任务 委托给 子类的子类 , 继续向下传递 ;

83830

加载

加载器种类 启动加载器,Bootstrap ClassLoader,加载JACA_HOME\lib,或者被-Xbootclasspath参数限定的 扩展加载器,Extension ClassLoader...,加载\lib\ext,或者被java.ext.dirs系统变量指定的 应用程序加载器,Application ClassLoader,加载ClassPath中的库 自定义加载器,通过继承ClassLoader...实现,一般是加载我们的自定义 双亲委派模型 加载器 Java 如同其它的 Java 一样,也是要由加载器来加载的;除了启动加载器,每个都有其父加载器(父子关系由组合(不是继承)来实现);...所谓双亲委派是指每次收到加载请求时,先将请求委派给父加载器完成(所有加载请求最终会委派到顶层的Bootstrap ClassLoader加载器中),如果父加载器无法完成这个加载(该加载器的搜索范围中没有找到对应的...双亲委派好处 避免同一个被多次加载; 每个加载器只能加载自己范围内的加载过程 加载分为三个步骤:加载,连接,初始化; ?

46500

加载器与加载过程

加载器子系统作用 加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。...加载信息存放于一块称为方法区的内存空间。...除了的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射) 加载器ClasLoader角色 class file存在于本地硬盘上...加载过程 public class HelloLoader { public static void main(String[] args) { System.out.println...由于Java采用的是懒加载策略,只有当我们需要用到这个的时候才会去加载他  初始化阶段就是执行构造器方法()的过程。

15730

加载与 Java主加载机制解析

之所以要逐个详细讲解,一方面是因为JVM使用C/C++编写而成,而C/C++语言本身就比Java语言更具难度,相信只要不是直接从事JVM开发的道友,阅读起来都会比较吃力,里面有太多的内存分配、回收、指针...以上便是一个Java加载的核心流程。了解了加载的核心流程之后,也许聪明的你会忍不住想,Java加载到底何时才会被触发呢?...Java程序主加载器默认是系统加载器,该加载器是JDK库中定义的sun.misc.AppClassLoader,关于该加载器的细节会在后文详述。JVM体系中加载器的继承关系如下图所示。 ?...这里不得不提一句,JVM作为一款虚拟机,其本身由C/C++语言写成,但是JVM是为执行Java字节码文件而生的,因此JVM内部必然有一套机制能够从C/C++程序调用Java中的方法,这套机制便通过JavaCalls...AppClassLoader的父加载器是ExtClassLoader,这是扩展加载器,用于加载JDK中指定路径下的扩展,这种加载器不会加载Java应用程序的主,所以程序流会进入if(this.parent

82110

加载过程

的生命周期 加载过程 加载 验证 准备 解析 初始化 卸载 的生命周期 一个的完整生命周期如下: 加载过程 Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些...一个非数组加载阶段(加载阶段获取的二进制字节流的动作)是可控性最强的阶段,这一步我们可以去完成还可以自定义加载器去控制字节流的获取方式(重写一个加载器的 loadClass() 方法)。...数组类型不通过加载器创建,它由 Java 虚拟机直接创建。 加载器、双亲委派模型也是非常重要的知识点,这部分内容会在后面的文章中单独介绍到。...该类没有在其他任何地方被引用 该类的加载器的实例已被 GC 所以,在 JVM 生命周期内,由 jvm 自带的加载加载是不会被卸载的。但是由我们自定义的加载加载是可能被卸载的。...而我们自定义的加载器的实例是可以被回收的,所以使用我们自定义加载加载是可以被卸载掉的。 参考

56020

加载机制

加载器并不需要等到某个被“首次主动使用”时再加载它,JVM 规范允许加载器在预料某个将要被使用时就预先加载它,如果在预先加载的过程中遇到了 .class 文件缺失或存在错误,加载器必须在程序首次主动使用该类时才报告错误.../md/java/jvm/java-jvm-classload.html 2 加载机制 2.1 双亲委派机制 双亲委派机制是指如果一个加载器收到了加载的请求,它首先不会自己去尝试加载这个,而是把请求委托给父加载器去完成...,依次向上,因此,所有的加载请求最终都应该被传递到顶层的启动加载器中,只有当父加载器 在它的搜索范围中没有找到所需的时,即无法完成该加载,子加载器才会尝试自己去加载该类。...既然是加载这个时出现的问题,我们首先要知道是哪个加载器在尝试加载这个。...结合加载机制中的全盘负责机制,我们知道这个匿名是由加载依赖它的 org.apache.iotdb.MySum 的加载器来加载的,我们把这个加载器记为 A。

46210

加载小结

本节来学习加载机制 什么是加载 简单来说就是将.class文件实例成Class对象并进行初始化的过程,字节码必须通过加载过程加载到JVM环境后才可以执行 classloder(加载器)的使命就是将....class文件加载到内存中,在启动之初进行的Load、Link和Init,在加载时使用的是双亲委派模型 加载 加载过程 1 加载阶段读取文件产生的二进制流并转为特定的数据结构,创建对应的...加载器 字节码文件加载到内存就是通过加载器来实现的,加载器类似于原始部落结构存在权力等级,最高的一层是家族中威望最高的Bootstrap,它是jvm启动时创建的,是通过C来实现的,并不存在于JVM...中 双亲委派模型 加载器之间的这种层次关系就是双亲委派模型。...双亲委派模型要求除了顶层的启动加载器外,其他的加载器都应有自己的父加载器 这部分内容是对第一张图中加载这个方框部分的内容的拓展

22220

加载机制

加载器只用于实现加载动作。对于任意一个,都需要由加载它的加载器和这个本身一同确立其在Java虚拟机中的唯一性,每一个加载器,都拥有一个独立的名称空间。...从开发人员的角度加载器有三种:启动加载器,扩展加载器,应用程序加载器 启动加载器:负责将存放在<JAVA_HOME>\lib目录中的加载到虚拟机内存中 扩展加载器:负责将存放在<JAVA_HOME...>\lib\ext目录中的加载到虚拟机内存中 应用程序加载器:它负责加载用户路径(ClassPath)上所指定的库 双亲委派机制 加载器之间如下图的这种层次关系,称为加载器的双亲委派模型。...双亲委派模型的工作过程:如果一个加载器收到了加载的请求,它首先不会自己去尝试加载这个,而是把这个请求委派给父加载器去完成,每一个层次的加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动加载器中...例如java.lang.Object,它存放在rt.jar之中,无论哪一个加载器要加载这个,最终都是委派给处于模型最顶端的启动加载器进行加载,因此Object在程序的各种类加载器环境中都是同一个

37820

加载机制

加载机制 Java虚拟机把描述的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的加载机制。...加载阶段既可以使用Java虚拟机里内置的加载器来完成,也可以由用户自定义的加载器去完成,开发人员通过定义自己的加载器去控制字节流的获取方式(重写一个加载器的findClass()或loadClass...,那虚拟机将会把代表N的全限定名传递给D的加载器去加载这个C。...在加载过程中,由于元数据验证、字节码验证的需要,又可能触发其他相关加载动作,例如加载这个的父或实现的接口。一旦这个加载过程出现了任何异常,解析过程就将宣告失败。...连接之初始化 的初始化阶段是加载过程的最后一个步骤,之前介绍的几个加载的动作里,除了在加载阶段用户应用程序可以通过自定义加载器的方式局部参与外,其余动作都完全由Java虚拟机来主导控制。

60920

JAVA加载

其实,加载器并不需要等到某个被“首次主动使用”时再加载它,JVM 规范允许加载器在预料某个将要被使用时就预先加载它,如果在预先加载的过程中遇到了.class 文件缺失或存在错误,加载器必须在程序首次主动使用该类时才报告错误...相对于加载的其他阶段而言,加载阶段是可控性最强的阶段,因为程序员可以使用系统的加载加载,还可以使用自己的加载加载。我们在最后一部分会详细介绍这个加载器。...我们看到 java为我们提供了三个加载器,应用程序都是由这三种加载器互相配合进行加载的,如果有必要,我们还可以加入自定义的加载器。这三种加载器的加载顺序是什么呢?...3、双亲委派原则 他的工作流程是: 当一个加载器收到加载任务,会先交给其父加载器去完成,因此最终加载任务都会传递到顶层的启动加载器,只有当父加载器无法完成加载任务时,才会尝试执行加载任务。...双亲委派原则归纳一下就是: **可以避免重复加载,父已经加载了,子类就不需要再次加载更加安全,很好的解决了各个加载器的基础的统一问题,如果不使用该种方式,那么用户可以随意定义加载器来加载核心

1.1K75

加载

加载器虽然只用于实现加载动作,但它在Java程序中起到的作用却远远不限于加载阶段。比如判断两个是否“相等”,只有两个是由同一个加载加载的前提下才有意义。...加载器类型   从Java虚拟机的角度来讲,只存在两种类加载器:   * 启动加载器(Bootstrap ClassLoader),这个加载器使用C++语言实现,是虚拟机自身的一部分;   *...加载器双亲委派模型要求除了顶层的启动加载器外,其它的加载器都应该有自己的父加载器。这里的加载器之间的父子关系不是通过继承实现的,都是使用组合关系来复用父加载器的代码。   ...加载器双亲委派模型的工作过程:如果一个加载器收到加载的请求,它首先把这个请求委派给父加载器去完成,每一层次的加载器都是如此,因此所有的加载请求都应该传到顶层的启动加载器中,只有当父加载器反馈自己无法完成这个加载请求时...由于只能向上委派,到了启动加载器后不能往下询问,即顶层的加载器,无法访问底层的加载器所加载

53530

加载

概念 加载 加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个的java.lang.Class对象 链接:将Java的二进制代码合并到...JVM的运行状态之中的过程 验证:确保加载信息符合JVM规范,没有安全方面的问题 准备:正式为变量(static)分配内存并设置变量默认初始化值的阶段,这些内存都将在方法区中进行分配 解析:虚拟机常量池的符号引用...比如:当通过子类引用父的静态变量,不会导致子类初始化 通过数组定义引用,不会触发此类的初始化 引用常量不会触动此类的初始化(常量在链接阶段就存入调用的常量池中了) 加载的作用 将class文件字节码内容加载到内存中...缓存 标准的JavaSE加载起器可以按要求查找,但一旦某个加载加载器中,它将维持加载(缓存)一段时间。...main(String[] args) { A a=new A(); System.out.println(A.m); /** * 1.加载到内存

25910

加载

加载器基本概念 顾名思义,加载器(class loader)用来加载 Java 到 Java 虚拟机中。...加载器的代理模式 加载器在尝试自己去查找某个的字节代码并定义它时,会先代理给其父加载器,由父加载器先去尝试加载这个,依次类推。...加载的过程 在前面介绍加载器的代理模式的时候,提到过加载器会首先代理给其它加载器来尝试加载某个。这就意味着真正完成加载工作的加载器和启动这个加载过程的加载器,有可能不是同一个。...也就是说,哪个加载器启动加载过程并不重要,重要的是最终定义这个加载器。两种类加载器的关联之处在于:一个的定义加载器是它引用的其它的初始加载器。...加载器在成功加载某个之后,会把得到的 java.lang.Class的实例缓存起来。下次再请求加载该类的时候,加载器会直接使用缓存的的实例,而不会尝试再次加载

49530

加载

名称 加载哪的 说明Bootstrap(引导加载器) ClassLoader JAVA_HOME/lib,无法直接访问(平台相关的底层C/C++语言实现, 所以该加载器不能被...用户可以自己定义加载器来加载。...逻辑是从自定义加载器一直往上父加载器递归调用,直到扩展加载器发现没有parent了,就会去查看引导加载器加没加载过该类。...加载顺序应该是先查看引导加载器是否加载,再由父加载器尝试加载,最后是子类加载器自己加载。...双亲委派:向上委派过程:第一步: 将自定义加载器挂载到应用程序加载器;第二步: 应用程序加载器将请求委托给扩展加载器;第三步: 扩展加载器将请求委托给启动加载器。

5700

加载过程

的生命周期 加载->连接->初始化->使用->卸载 其中连接包括:验证->准备->解析 加载过程 Class文件需要加载到虚拟机之后才能运行。...系统加载Class文件的步骤:加载->连接->初始化。 加载 1.通过全加载该类对应的二进制字节流。 2.将该二进制字节流代表的静态存储结构存到方法区的运行时数据结构中。...一个非数组加载阶段可控性最强,可以在这个阶段自定义加载器去控制字节流的获取方法(重写加载器的classLoad()方法)。数组类型不通过加载器创建,他直接由JVM创建。...加载和连接阶段的部分阶段是可以交叉执行的,加载阶段尚未结束,连接过程可能就开始了。 验证 文件格式验证。 元数据验证。 字节码验证。 符号引用验证。 准备 准备阶段为变量分配内存并赋初始值的过程。...3.加载该类的加载器被GC。 参考:JavaGuide

37710
领券