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

VM的类加载的过程是通过引导类加载器

类加载过程 JVM的类加载的过程是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由JVM的具体实现指定的。...验证# 确保class文件中的字节流包含的信息,符合当前虚拟机的要求,保证这个被加载的class类的正确性,不会危害到虚拟机的安全。...当虚拟机启动时,用户需要定义一个要执行的主类 (包含 main 方法的那个类),虚拟机会先初始化这个类。...AppClassLoader的父类加载器为ExtensionClassLoader ,ExtensionClassLoader 的父类加载器为null,当父类加载器为null时,会使用启动类加载器 BootstrapClassLoader...为什么要使用双亲委派模型# 试想一种情况,我们在项目目录下,手动创建了一个java.lang 包,并在该包下创建了一个Object,这时候我们再去启动Java程序,原生Object会被篡改吗?

72130

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

文章目录 一、类加载器 二、类加载的双亲委托机制 一、类加载器 ---- Java 虚拟机 ClassLoader 类加载器 : Bootstrap ClassLoader : 启动类加载器 , 该 加载器由...ClassLoader 应用类加载器 Application ClassLoader 自定义类加载器 Custom ClassLoader 在双亲委托机制中 , 上层的类加载器 是 下层类加载器 的父类...类加载任务 之后 , 也会 委托 父类的父类 类加载器 执行 ; 委托操作 , 会一直传递到 最顶层的 启动类加载器 Bootstrap ClassLoader ; 如果 启动类加载器 Bootstrap...; 同理 , 父类 委托 给子类的 类加载任务 , 如果 子类类加载器 可以完成加载 , 成功返回 , 如果子类类加载器无法完成加载 , 就再次 将 类加载任务 委托给 子类的子类 , 继续向下传递 ;...无法 被替代 , 系统类只能由 启动类加载器 Bootstrap ClassLoader 加载 , 应用类加载器 加载被篡改的 Java 核心类是无效的 ;

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

    类加载器与类的加载过程

    类加载器子系统作用 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。...补充:加载class文件的方式 从本地系统中直接加载 通过网络获取,典型场景:Web Applet 从zip压缩包中读取,成为日后jar、war格式的基础 运行时计算生成,使用最多的是:动态代理技术...Class文件的字节流中包含信息符合当前虚拟机要求,保证被加载类的正确性,不会危害虚拟机自身安全。...这里不包含用final修饰的static,因为final在编译的时候就会分配了,准备阶段会显式初始化; 这里不会为实例变量分配初始化,类变量会分配在方法区中,而实例变量是会随着对象一起分配到Java...由于Java采用的是懒加载策略,只有当我们需要用到这个类的时候才会去加载他  初始化阶段就是执行类构造器方法()的过程。

    18230

    类加载器 超详解:什么是类加载器,类加载器作用及应用场景,类加载时机,类加载的完整过程,类加载器分类

    不推荐,尽可能不要去更改JDK安装目录中的内容,因为即使放进去由于文件名不匹配的问题也不会正常地被加载(在加载jar包的时候,会对名称进行校验,名称必须符合JVM内部的一些规范)。使用参数进行扩展。...JDK中提供的、使用Java编写的类加载器。...不推荐,尽可能不要去更改JDK安装目录中的内容。使用参数进行扩展使用参数进行扩展。...路径中要包含原来ext文件夹,同时在最后加上扩展的路径。应用程序类加载器应用程序类加载器会加载classpath下的类文件,默认加载的是项目中的类以及通过maven引入的第三方jar包中的类。...(5)JVM为什么采用双亲委派机制通过双亲委派机制可以避免某一个类被重复加载,当父类已经加载后则无需重复加载,保证唯一性。

    11910

    类加载器的方法_JS加载器

    ==c2); // true 同一个类加载器器,加载同名的类,第一次加载时加载的类会缓存到类加载器的缓存,再次加载直接在缓存读取,两次加载的是同一个类 //直接获取类的类加载器...} } 在应用程序中,默认我们获取上下文类加载器、类型对象getClassLoader都是采用的同一个应用程序类加载器,类在第一次被加载后会缓存到类加载器的缓存中,由于是同一个类加载器此时同名的类不能被多次加载...编写自定义类加载器: 继承ClassLoader; 重写findClass方法在指定路径下进行类的加载,得到字节数组,然后使用defineClass根据字节数组生成字节码文件 也就是class文件;...> c3 = classLoader2.loadClass("Goods"); System.out.println(c1==c3); //false 使用不同的类加载器对同一个类进行加载...",e); } } } 使用自定义加载器,创建多个类加载器对象去加载同一个类,会得到多个类型对象。

    5.9K10

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

    再次之前我想补充一个名词解释,类加载器:虚拟机把  实现 类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流” 这个过程的代码称为类加载器 1....: 1.先检查此类是否被加载过,若没有加载则调用父加载器的loadClass()方法, 2.若父加载器为空,则默认使用启动类加载器作为父加载器, 3.若父类加载失败,会抛出一个异常,然后再调用自己的findClass...()方法来进行加载; 结合第一步加载可以这么理解,  1.首先要启动→   启动类加载器,这时会调用启动类加载器的父加载器,但由于启动类加载器时所有类的父加载器, 所以其父加载器为空(相当于Object...是所有类的父类,这种感脚~),然后它就会调用自己的findClass方法来自启动加载 ; 2.标准扩展类加载器启动时就会借助其父类 启动类加载器 作为父加载器 来启动了; 3.系统类加载器启动时就会借助其父类...3.初始化一个类的时候,如果其父类还没有被初始化,那么会先去初始化其父类; 4.当 JVM 启动时,用户需要指定一个要执行的主类(包含static void main(String 【】args)的那个类

    1.5K80

    自定义类加载器加载jar包_类加载器的可见性

    大家好,又见面了,我是你们的朋友全栈君。...spring根本不会去管自己被放在哪里,它统统使用TCCL来加载类,而TCCL默认设置为了WebAppClassLoader,也就是说哪个WebApp应用调用了spring,spring就去取该应用自己的...这在真正理解线程上下文类加载器(多案例分析)中已有详细描述。 因此,为了使spring使用自定义的类加载器进行加载,需要开一个线程,将这个线程的类加载器设置为自定义类加载器。...; }; FutureTask task=new FutureTask(callable); Thread thread=new Thread(task); // 设置线程上下文类加载器...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    83520

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

    再次之前我想补充一个名词解释,类加载器:虚拟机把  实现 类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流” 这个过程的代码称为类加载器 1....: 1.先检查此类是否被加载过,若没有加载则调用父加载器的loadClass()方法, 2.若父加载器为空,则默认使用启动类加载器作为父加载器, 3.若父类加载失败,会抛出一个异常,然后再调用自己的findClass...()方法来进行加载; 结合第一步加载可以这么理解,  1.首先要启动→   启动类加载器,这时会调用启动类加载器的父加载器,但由于启动类加载器时所有类的父加载器, 所以其父加载器为空(相当于Object...是所有类的父类,这种感脚~),然后它就会调用自己的findClass方法来自启动加载 ; 2.标准扩展类加载器启动时就会借助其父类 启动类加载器 作为父加载器 来启动了; 3.系统类加载器启动时就会借助其父类...3.初始化一个类的时候,如果其父类还没有被初始化,那么会先去初始化其父类; 4.当 JVM 启动时,用户需要指定一个要执行的主类(包含static void main(String 【】args)的那个类

    60350

    jvm的类加载器(classloader)及类的加载过程

    注意:类加载即可以由引导类加载器或自定义类加载器去完成加载。...(); System.out.println(classLoader); //获取strng 类加载器 null(使用引导类加载器)java核心都是使用该种加载方式...18b4aac2 sun.misc.Launcher$ExtClassLoader@14ae5a5 null sun.misc.Launcher$AppClassLoader@18b4aac2 null 个人理解:引导类加载器和自定义类加载器...,自定义类就像你自己的手机随时想用就用,或者你家人想用直接向你借就OK了,但是引导类就像某个大领导的个人手机,你跟你家人一般是无法直接借到的(基本不可能)。...此外类加载还采用了cache机制,也就是如果 cache中保存了这个Class就直接返回它,如果没有才从文件中读取和转换成Class,并存入cache,这就是为什么我们修改了Class但是必须重新启动JVM

    1.9K21

    Javaweb-类加载器-类加载器的了解入门

    类加载器的分类 类加载器有三个分类,以下三类分工明确,负责不同的类加载。 引导类加载器 这个分类主要是类库加载,例如jre下面的lib文件夹中的rt.jar中类加载进JVM内存。...系统类加载器 这分类就是加载一些应用下的类,例如我们写一个web项目,我们使用到很多其他第三方的jar包,这些类就是系统类加载器来完成加载。还有我们自己写的代码文件,也是系统类加载器完成这操作。...这三个分类的关系是,系统类加载器的上层是扩展类加载器,扩展类加载器的上层是引导类加载器,引导类加载器是老大,没有上层。...3) 扩展加载类也不管,直接通知引导加载类,想让引导加载类去执行加载。...5) 如果引导加载器发现A类不是自己管辖范围,返回null给扩展。

    46200

    Java的类加载器

    分类 系统自带的类加载器 启动类加载器(BootStrap) c++编写 加载核心库 java.* 3.拓展类加载器 (Extension) java编写 加载拓展库 javax.* 4.应用程序加载类...(AppClassLoader)java编写 加载程序所在目录 5.用户自定义的类加载器 自定义类加载器 java编写 定制化加载 我们先了解2个方法 第一个方法 findClass /**...必须先解析Class才能使用。 大白话就是,将字节流转换为类,找不到就报错!子类应该覆盖这个方法 第二个方法 defineClass protected final Class类加载器去加载这个文件!我们通过类加载器创建该实例!他就会打印构造函数中的一句话!废话不多说我们直接上图吧!...然后开始编写我们自己的类加载器!

    36720

    Flink的类加载器

    动态用户代码:这些是动态提交的作业的 JAR 文件中包含的所有类(通过 REST、CLI、Web UI)。 它们按作业动态加载(和卸载)。...这些 JVM 在 Java 类路径中具有用户代码类。 这意味着在这种情况下,作业不涉及动态类加载。...反向类加载和类加载器解析顺序 在涉及动态类加载的设置中(插件组件、会话设置中的 Flink 作业),通常有两个类加载器的层次结构:(1)Java 的应用程序类加载器,它包含类路径中的所有类,以及(2)动态插件...反向类加载的好处是插件和作业可以使用与 Flink 核心本身不同的库版本,这在不同版本的库不兼容时非常有用。...这意味着 com.foo.X 类的多个版本已被不同的类加载器加载,并且该类的类型试图相互分配。 一个常见的原因是库与 Flink 的反向类加载方法不兼容。

    2.3K20

    类加载器加载Class文件的过程

    类加载器加载Class文件的过程 jdk8和9有一些区别,这里以8为准,9作为最后的扩充 类加载器是用于加载class文件的,我们从这里开始介绍 前言 因为底层硬件的不同,如果在不同硬件上都要做一次适配化无疑是令人奔溃的...java的类文件或者文件已经损坏,无法进行加载。...之外,所有的类都应当有父类就是这里验证的 字节码验证 保证不会出现类似于“在操作 栈放置了一个int类型的数据,使用时却按long类型来加载入本地变量表中”这样的情况。...执行类构造器方法 类加载器 参考上一篇文章中 保证Java程序的稳定运作 它确保了内存中类的唯一性 先看层级结构 写代码验证 public class Main { public...因为BootstrapClassLoader是通过C/C++实现的,不存在JVM体系中所以输出为null, 类加载器具有登记制度但是并没有继承关系,以组合的方式复用父加载器的功能 附加 JDK9中用平台加载器替代了扩展加载器的功能

    1.2K20

    【Android 逆向】类加载器 ClassLoader ( 加载 Android 组件的类加载器 | 双亲委派机制实例分析 )

    文章目录 一、加载 Android 组件的类加载器 二、加载 Android 组件的类的双亲委派机制实例 一、加载 Android 组件的类加载器 ---- 打印 Activity 组件类 的 类加载器...及 该 类加载器 的 父类类加载器 : package com.example.classloader_demo; import androidx.appcompat.app.AppCompatActivity...Android 组件的类的双亲委派机制实例 ---- Activity 类加载分析 : Activity 组件类的类加载器是 dalvik.system.PathClassLoader , dalvik.system.PathClassLoader...类加载器的 父类节点是 java.lang.BootClassLoader 类加载器 , java.lang.BootClassLoader 是根节点的 类加载器 ; 双亲委派机制 : 在双亲委派机制中..., 类加载任务 , 先被分配给 PathClassLoader , PathClassLoader 不处理 , 将任务委派给父类节点 BootClassLoader; BootClassLoader

    30430

    OSGi的类加载器架构和特性,对比其他类加载器的优势

    类加载器层次结构: OSGi引入了类加载器层次结构,包括了系统类加载器、扩展类加载器和模块类加载器。每个模块都有自己独立的类加载器,它只加载属于模块的类和资源,并且可以隔离不同模块之间的类和资源。...模块隔离性: OSGi的类加载器架构提供了模块之间的隔离性。每个模块都有自己独立的类加载器,它只加载属于模块的类和资源。这种隔离性可以防止模块之间的类冲突和版本冲突。...OSGi类加载器相比其他类加载器的优势模块化架构: OSGi的类加载器架构是为模块化设计的,使得应用程序可以按需加载和管理模块。与传统的类加载器相比,它更适合构建大型和复杂的应用程序。...版本管理: OSGi使用模块的版本来标识和管理不同的模块。这使得可以同时存在多个相同模块的不同版本,并且可以根据需要动态地加载、卸载和切换模块。这种版本管理能力使得应用程序更易扩展和维护。...模块隔离性: OSGi的类加载器架构提供了模块之间的隔离性。每个模块有自己独立的类加载器,它只加载属于模块的类和资源。这种隔离性可以防止模块之间的类冲突和版本冲突,提高了应用程序的稳定性和可靠性。

    42161

    jvm之java类加载机制和类加载器(ClassLoader)的详解

    ② 加载 读取二进制内容 ③ 验证 yan验证class文件格式规范,语义分析,引用验证,字节码验证。必须有一定的规范。不能随意的进行加载,不像咱们普通人一句话:不干不净吃了没病。...用户应用程序class-path 或者java命令运行时参数 -cp(开发人员写的代码,对应类存放在哪里,JAVA是怎么知道的,为什么用eclipse和idea右键可以直接跑了,其实就是在底层指定目录地址...识别方式:ClassLoader instance id + PackageName + ClassName 验证方式:使用类加载器,对同一个class类的不同版本,进行多次加载,检查是否加载到最新的代码...首先不会自己去尝试加载类,而是把这个请求委派给父加载器去完成,每一个层次的加载器都是如此,因此所有的类加载请求都会传给上层的启动类加载器。...但是有了双亲委派模型,他直接找他的上级加载器,上级一直是老的他不直接用他了,也就是说本身就是个败类肯定不会用自己的东西,肯定用上级的,所以改变的HelloWorld类不会被重新加载。

    1.6K20

    jvm之java类加载机制和类加载器(ClassLoader)的详解

    除此之外,开发者可以通过继承ClassLoader基类来创建自己的类加载器。 通过使用不同的类加载器,可以从不同来源加载类的二进制数据,通常有如下几种来源。...3.初始化 初始化是为类的静态变量赋予正确的初始值,准备阶段和初始化阶段看似有点矛盾,其实是不矛盾的,如果类中有语句:private static int a = 10,它的执行过程是这样的,首先字节码文件被加载到内存后...JVM预定义有三种类加载器,当一个 JVM启动的时候,Java开始使用如下三种类加载器: 1)根类加载器(bootstrap class loader):它用来加载 Java 的核心类,是用原生代码来实现的...由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。...请求使用父类加载器去载入目标类,如果载入成功则跳至第8步,否则接着执行第5步。 请求使用根类加载器去载入目标类,如果载入成功则跳至第8步,否则跳至第7步。

    91420

    JVM类加载器的分类

    JVM支持两种类型的类加载器 。...,但是Java虚拟机规范却没有这么定义,而是将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器 无论类加载器的类型如何划分,在程序中我们最常见的类加载器始终只有3个,如下所示 为什么...ExtClassLoader 和 AppClassLoader 都属于自定义加载器 规范定义:所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器 1.虚拟机自带的加载器 1.1 启动类加载器...(引导类加载器) 启动类加载器( 引导类加载器,Bootstrap ClassLoader ) 这个类加载使用C/C++语言实现的,嵌套在JVM内部 它用来加载Java的核心库(JAVA_HOME /...,没有父加载器 加载扩展类和应用程序类加载器,并作为他们的父类加载器(当他俩的爹) 出于安全考虑,Bootstrap启动类加载器只加载包名为java、javax、sun等开头的类 1.2 扩展类加载器

    26230

    JVM中的类加载器

    类加载器   把类加载阶段中的"通过一个类的全限定名来获取描述此类的二进制字节流"这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类,实现这个动作的代码模块称为类加载器。...} else { // 使用引导加载器 c = findBootstrapClassOrNull(name);...(rj.jar) ,无法被java程序直接是使用 2 扩展类加载器Extension ClassLoader 负责加载 \lib\ext目录中或者被java.ext.dirs指定的目录下的类库...,程序员可以直接使用该加载器 3 应用程序类加载器 Application ClassLoader 也称系统类加载器,负责加载用户类路径上所指定的类库,一般是程序默认的类加载器 ?...,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器完成,每一个层次的类加载器都是如果,因此所有的加载请求最终都应该传递到顶层的启动类加载器中 当父加载器反馈无法加载该类时(搜索范围中没有找到所需的类

    46760
    领券