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

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

文章目录 一、类加载器 二、类加载的双亲委托机制 一、类加载器 ---- Java 虚拟机 ClassLoader 类加载器 : Bootstrap ClassLoader : 启动类加载器 , 该 加载器由...程序才能开始执行 ; 二、类加载的双亲委托机制 ---- 类加载器级别 : 权限 / 重要性 从高到低排列 ; 启动类加载器 Bootstrap ClassLoader 扩展类加载器 Extention...ClassLoader 应用类加载器 Application ClassLoader 自定义类加载器 Custom ClassLoader 在双亲委托机制中 , 上层的类加载器 是 下层类加载器 的父类...类加载任务 之后 , 也会 委托 父类的父类 类加载器 执行 ; 委托操作 , 会一直传递到 最顶层的 启动类加载器 Bootstrap ClassLoader ; 如果 启动类加载器 Bootstrap...无法 被替代 , 系统类只能由 启动类加载器 Bootstrap ClassLoader 加载 , 应用类加载器 加载被篡改的 Java 核心类是无效的 ;

89230

类加载器与类的加载过程

类加载器子系统作用 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。...使用魔数而不是扩展名来识别Class文件,主要是基于安全方面的考虑,因为文件扩展名可以随意更改。...除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射) 类加载器ClasLoader角色 class file存在于本地硬盘上...由于Java采用的是懒加载策略,只有当我们需要用到这个类的时候才会去加载他  初始化阶段就是执行类构造器方法()的过程。...此方法不需定义,是javac编译器自动收集类中的所有类变量的赋值动作和静态代码块中的语句合并而来。 构造器方法中指令按语句在源文件中出现的顺序执行。 ()不同于类的构造器。

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

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

    【理解】4.1 概述4.2 JDK8及之前的版本4.2.1 启动类加载器4.2.2 扩展类加载器和应用程序类加载器扩展类加载器应用程序类加载器4.3 JDK9之后的类加载器4.4 ClassLoader...类加载器会通过二进制流的方式获取到字节码文件的内容,接下来将获取到的数据交给Java虚拟机,虚拟机会在方法区和堆上生成对应的对象保存字节码信息(类加载器只参与加载过程中的字节码获取并加载到内存这一部分)...其中,验证、准备和解析这三个部分统称为连接(linking)3.1 加载通过类的全名(包名 + 类名),获取类的二进制数据流将这个类加载到内存中:解析类的二进制数据流为方法区内的数据结构(Java类模型...不推荐,尽可能不要去更改JDK安装目录中的内容。使用参数进行扩展使用参数进行扩展。...避免了核心类被应用程序重写并覆盖的问题,提升了安全性)加载某一个类,先委托上一级的加载器进行加载,如果上级加载器也有上级,则会继续向上委托,如果该类委托上级没有被加载,子加载器尝试加载该类应用程序类加载器的父类加载器是扩展类加载器

    11910

    类加载器的方法_JS加载器

    ==c2); // true 同一个类加载器器,加载同名的类,第一次加载时加载的类会缓存到类加载器的缓存,再次加载直接在缓存读取,两次加载的是同一个类 //直接获取类的类加载器....getContextClassLoader(); System.out.println(classLoader==contextClassLoader); //true 线程上下文类加载器默认采用的也是应用程序类加载器...} } 在应用程序中,默认我们获取上下文类加载器、类型对象getClassLoader都是采用的同一个应用程序类加载器,类在第一次被加载后会缓存到类加载器的缓存中,由于是同一个类加载器此时同名的类不能被多次加载...,且应用程序类加载器只能加载classpath下的类。...如果我们想加载自定义路径下的类,需要用到自定义类加载器,可以去指定路径下加载类,且通过创建多个类加载器对象,加载的同名类相互隔离,也就是说同名类可以被多个自定义类加载器对象加载。

    5.9K10

    CLR中的程序集加载

    CLR中的程序集加载       本次来讨论一下基于.net平台的CLR中的程序集加载的机制:   【注:由于.net已经开源,可利用vs2015查看c#源码的具体实现】 在运行时,JIT编译器利用程序集的...在AssemblyRef元数据表的记录项中,包含构成程序集的强名称的各个部分。JIT编译器获取包括名称(无扩展名和路径)、版本、语言文化和公钥标记,将这些连接成一个字符串。...JIT编译器将该标识匹配的一个程序集加载到AppDomain中。】      CLR内部加载程序集提供了4中方法,在System.Refleetion.Assembly类中:     1.    ...采用静态方法Load()加载程序集,可调用它显示的将一个程序集加载到AppDomain中: 【注:Assembly类的Load()存在两个重载版本】 /// /// 通过给定的程序集的显示名称来加载程序集...2.采用Assembly的LoadFrom方法,指定路径名的方式加载程序集: /// /// 已知程序集的文件名或路径,加载程序集。

    1.1K80

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

    类加载器的分类 类加载器有三个分类,以下三类分工明确,负责不同的类加载。 引导类加载器 这个分类主要是类库加载,例如jre下面的lib文件夹中的rt.jar中类加载进JVM内存。...这三个分类的关系是,系统类加载器的上层是扩展类加载器,扩展类加载器的上层是引导类加载器,引导类加载器是老大,没有上层。...一开始,我们在代码中写这行代码new A(); 由于A类可能是JDK自带,也可能是程序员自己写的,这个类在加载进内存需要经历下面这个过程。...2) 应用类加载器,这个主要加载当前web项目下\WEB-INF\lib 和\WEB-INF\classes, 就是我们程序员代码编译之后文件在\WEB-INF\classes,一些第三方jar包在\WEB-INF...说一下这种类加载器和前面知道的三个类加载器的区别和关系。在Tomcat下两种类加载器都排下上面系统类加载器的下面,这两个的上层都是系统类加载器。

    46400

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

    大家好,又见面了,我是你们的朋友全栈君。...spring根本不会去管自己被放在哪里,它统统使用TCCL来加载类,而TCCL默认设置为了WebAppClassLoader,也就是说哪个WebApp应用调用了spring,spring就去取该应用自己的...这在真正理解线程上下文类加载器(多案例分析)中已有详细描述。 因此,为了使spring使用自定义的类加载器进行加载,需要开一个线程,将这个线程的类加载器设置为自定义类加载器。...; }; FutureTask task=new FutureTask(callable); Thread thread=new Thread(task); // 设置线程上下文类加载器...return task.get(); }catch (Exception e){ e.printStackTrace(); } return null; } 参考网站 真正理解线程上下文类加载器

    83520

    Flink的类加载器

    反向类加载和类加载器解析顺序 在涉及动态类加载的设置中(插件组件、会话设置中的 Flink 作业),通常有两个类加载器的层次结构:(1)Java 的应用程序类加载器,它包含类路径中的所有类,以及(2)动态插件...用于从插件或用户代码 jar 加载类。 动态 ClassLoader 将应用程序类加载器作为其父级。...默认情况下,Flink 反转类加载顺序,这意味着它首先查看动态类加载器,如果类不是动态加载代码的一部分,则仅查看父类(应用程序类加载器)。...JDBC:JDBC 驱动程序在用户代码类加载器之外泄漏引用。...Apache Maven 提供了 maven-shade-plugin,它允许在编译后更改类的包(因此您编写的代码不受阴影影响)。

    2.3K20

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

    1.JDK在执行程序运行命令时会去JRE目录中找到jvm.dll , 并初始化JVM 这时会产生一个Bootstrap Loader(启动类加载器) 2.Bootstrap Loader 自动加载 Extended...()方法来进行加载; 结合第一步加载可以这么理解,  1.首先要启动→   启动类加载器,这时会调用启动类加载器的父加载器,但由于启动类加载器时所有类的父加载器, 所以其父加载器为空(相当于Object...是所有类的父类,这种感脚~),然后它就会调用自己的findClass方法来自启动加载 ; 2.标准扩展类加载器启动时就会借助其父类 启动类加载器 作为父加载器 来启动了; 3.系统类加载器启动时就会借助其父类...5.初始化 类初始化阶段是类加载过程中的最后一步,这才是执行类中定义的java程序代码(也可以说是字节码)。...在准备阶段,已经为变量赋过一次系统要求的初始值,到了初始化阶段会根据程序员的要求出初始化变量赋值。

    1.5K80

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

    1.JDK在执行程序运行命令时会去JRE目录中找到jvm.dll , 并初始化JVM 这时会产生一个Bootstrap Loader(启动类加载器) 2.Bootstrap Loader 自动加载 Extended...()方法来进行加载; 结合第一步加载可以这么理解,  1.首先要启动→   启动类加载器,这时会调用启动类加载器的父加载器,但由于启动类加载器时所有类的父加载器, 所以其父加载器为空(相当于Object...是所有类的父类,这种感脚~),然后它就会调用自己的findClass方法来自启动加载 ; 2.标准扩展类加载器启动时就会借助其父类 启动类加载器 作为父加载器 来启动了; 3.系统类加载器启动时就会借助其父类...5.初始化 类初始化阶段是类加载过程中的最后一步,这才是执行类中定义的java程序代码(也可以说是字节码)。...在准备阶段,已经为变量赋过一次系统要求的初始值,到了初始化阶段会根据程序员的要求出初始化变量赋值。

    60350

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

    什么叫类加载(classloader)? 类加载简单的说就是JVM通过类加载器ClassLoader,把.class文件中的信息,拼装成Class对象放入内存中。...注意: 一个类方法的字节码没有通过字节码验证,那肯定是有问题; 如果一个方法体通过字节码验证,也不能表示一定就是安全的; 因为程序去校验程序逻辑是无法做到绝对准确。...初始化(Initialization) 初始化是类加载过程中最后一步,初始化目的:根据程序员程序编码制定的主观计划去初始化类变量和其他资源。...JAVA ClassLoader(类加载器)分类 Bootstrap Classloader(启动类加载器) 最顶层的加载类,由C或C++语言实现。...最后 虚拟机加载过程及类的加载器相关知识的了解,有利于今后自定义一些jar包的时候可以做为基础知识进行深入。比如当了解自定义类加载器后可以在些基础上开发对应的动态jar包进行相关的动态加载。

    1.9K21

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

    类加载器加载Class文件的过程 jdk8和9有一些区别,这里以8为准,9作为最后的扩充 类加载器是用于加载class文件的,我们从这里开始介绍 前言 因为底层硬件的不同,如果在不同硬件上都要做一次适配化无疑是令人奔溃的...java的类文件或者文件已经损坏,无法进行加载。...就是这个位置抛出的 初始化 Java虚拟机才真正开始执行类中编写的Java程序代码,将主导权移交给应用程序。...执行类构造器方法 类加载器 参考上一篇文章中 保证Java程序的稳定运作 它确保了内存中类的唯一性 先看层级结构 写代码验证 public class Main { public...因为BootstrapClassLoader是通过C/C++实现的,不存在JVM体系中所以输出为null, 类加载器具有登记制度但是并没有继承关系,以组合的方式复用父加载器的功能 附加 JDK9中用平台加载器替代了扩展加载器的功能

    1.2K20

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

    初始化# 初始化就是执行类的构造器方法,是类加载的最后一步,这一步 JVM才开始真正执行类中定义的 Java 程序代码 这个方法不需要定义,是javac编译器自动收集类中所有类变量的赋值动作和静态代码块中的语句合并来的...当 JVM执行 new 指令时会初始化类。即当程序创建一个类的实例对象。 当 JVM执行 getstatic 指令时会初始化类。即程序访问类的静态变量(不是静态常量,常量会被加载到运行时常量池)。...当 JVM执行 putstatic 指令时会初始化类。即程序给类的静态变量赋值。 当 JVM执行 invokestatic 指令时会初始化类。即程序调用类的静态方法。...AppClassLoader 应用程序类加载器:面向我们用户的加载器,负责加载当前应用classpath下的所有jar包和类。...结论 双亲委派模型保证了Java程序的稳定运行,可以避免类的重复加载,也保证了 Java 的核心 API 不被篡改。

    72130

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

    以下是OSGi的类加载器架构和特性:模块化构建: OSGi允许将应用程序划分为多个独立的模块,每个模块都有自己的类和资源。这种模块化的构建方式可以将应用程序划分为更小的可维护和可重用的部分。...动态更新: OSGi的类加载器架构使得可以在运行时动态地加载、卸载和更新模块,而不需要重启应用程序。这使得应用程序可以在不中断服务的情况下进行软件的更新和维护。...OSGi类加载器相比其他类加载器的优势模块化架构: OSGi的类加载器架构是为模块化设计的,使得应用程序可以按需加载和管理模块。与传统的类加载器相比,它更适合构建大型和复杂的应用程序。...动态更新: OSGi的类加载器架构允许在运行时动态地加载、卸载和更新模块,而不需要重启应用程序。这使得可以实时更新和维护应用程序,提高了应用程序的可用性和灵活性。...模块隔离性: OSGi的类加载器架构提供了模块之间的隔离性。每个模块有自己独立的类加载器,它只加载属于模块的类和资源。这种隔离性可以防止模块之间的类冲突和版本冲突,提高了应用程序的稳定性和可靠性。

    42261

    JVM中的类加载器

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

    46860

    Java类加载器的种类

    在Java中,一个加载到JVM中的类有一个唯一的标识————类的全限定类名(包名+类名)。 但在JVM中,一个类用其全限定类名和其类加载器作为其唯一标识。...例如,如果在ber的包中有一个名为User的类,被类加载器ClassLoader的实例kl负责加载,则该User类对应的Class对象在JVM中表示为(User.ber.kl)。...这意味着两个类加载器加载的同名类:(User.ber.kl)和(User.ber.kl2)是不同的、它们所加载的类也是完全不同、互不兼容的。...JVM预定义有三种类加载器,当 JVM启动的时候,Java开始使用如下三种类加载器: 根类加载器(bootstrap class loader) 它用来加载 Java 的核心类,是用原生代码来实现的,并不继承自...程序可以通过ClassLoader的静态方法getSystemClassLoader()来获取系统类加载器。如果没有特别指定,则用户自定义的类加载器都以此类加载器作为父加载器。

    13910

    灵活的类加载器OSGI

    OSGi之所以能有上述诱人的特点,必须要归功于它灵活的类加载器架构。OSGi的Bundle类加载器 之间只有规则,没有固定的委派关系。...这种网状的类加载器架构在带来更优秀的灵活性的同时,也可能会产生许多新的隐患。 类加载时可能进 行的查找规则如下:·以java.*开头的类,委派给父类加载器加载。...否则,委派列表名单内的类,委派给父类加载器加载。 否则,Import列表中的类,委派给Export这个类的Bundle的类加载器加载。...否则,查找当前Bundle的Classpath,使用自己的类加载器加载。 否则,查找是否在自己的Fragment Bundle中,如果是则委派给Fragment Bundle的类加载器加载。...否则,查找Dynamic Import列表的Bundle,委派给对应Bundle的类加载器加载。 否则,类查找失败。

    69030

    JVM类加载器的分类

    分别为引 导类加载器(Bootstrap ClassLoader) 和自定义类加载器(User-Defined ClassLoader) 从概念上来讲,自定义类加载器一般指的是程序中由开发人员自定义的一类类加载器...,但是Java虚拟机规范却没有这么定义,而是将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器 无论类加载器的类型如何划分,在程序中我们最常见的类加载器始终只有3个,如下所示 为什么...,没有父加载器 加载扩展类和应用程序类加载器,并作为他们的父类加载器(当他俩的爹) 出于安全考虑,Bootstrap启动类加载器只加载包名为java、javax、sun等开头的类 1.2 扩展类加载器...如果用户创建的 JAR 放在此目录下,也会自动由扩展类加载器加载 1.3 系统类加载器 应用程序类加载器(系统类加载器,AppClassLoader) Java语言编写,由sun.misc.LaunchersAppClassLoader...实现 派生于ClassLoader类 父类加载器为扩展类加载器 它负责加载环境变量 classpath 或 系统属性java.class.path指定路径下的类库 该类加载是程序中默认的类加载器,一般来说

    26230
    领券