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

类加载器与双亲委派模型1 类加载器2 双亲委派模型

2 双亲委派模型 2.1 类加载器种类 2.1.1 Java虚拟机的角度 启动类加载器(Bootstrap ClassLoader),这个类加载器使用C++语言实现(HotSpot虚拟机中),是虚拟机自身的一部分...由于这个类加载器是ClassLoader中的getSystemClassLoader()方法的返回值,因此一般称为系统(System)加载器 除此之外,还有自定义的类加载器,它们之间的层次关系被称为类加载器的双亲委派模型...2.2 双亲委派模型过程 某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载...使用双亲委派模型的好处在于Java类随着它的类加载器一起具备了一种带有优先级的层次关系 例如类java.lang.Object,它存在于rt.jar中,无论哪一个类加载器要加载这个类,最终都是委派给处于模型最顶端的...2.3 双亲委派模型的系统实现 在java.lang.ClassLoader的loadClass()方法中,先检查是否已经被加载过,若没有加载则调用父类加载器的loadClass()方法,若父加载器为空则默认使用启动类加载器作为父加载器

61320

类加载器以及双亲委派模型

1、小故事理解类加载器以及双亲委派模型 首先我们来描述一个小说场景,通过这个场景在去理解我们相关的类加载器的执行以及双亲委派模型。 上古时代有逍遥派和万魔宗两个宗派,互相对立。...宗主:引导类加载器。...特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。...2、双亲委派模型是如何使用的? 1)我们在自定义加载器中查找是否有需要加载的文件,如果已经加载过,直接返回字节码。...到自己指定的 类加载路径下(java.ext.dirs)查看 6) 最后到自定义类加载器指定的路径还没有找到对应XXX.class字节码,则抛出异常ClassNotFoundException 双亲委派有什么好处呢

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

    聊聊类加载器与双亲委派模型

    前言 我们经常会在面试中遇到有关类加载器的问题,而作为一名Java开发人员应该了解类加载器如何工作?双亲委派模型是什么?如何打破双亲委派?为什么打破?等等。所以今天的主题就是聊一聊类加载器。...双亲委派模型是什么 网上有文章分析说,类加载器遵循三个原则:委托性、可见性和唯一性原则。...这三点其实都和双亲委派模型有关,双亲委派的工作过程如下: 当类加载器收到类的加载请求时,首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,所有的加载请求会传送到顶层的启动类加载器...当然 Tomcat自定义类加载器不只解决上面的问题,WebAppClassLoader 打破了双亲委派机制,即它首先自己尝试去加载某个类,如果找不到再代理给父类加载器,其目的是优先加载Web应用定义的类...小结 这篇文章主要总结了类加载器的双亲委派模型、双亲委派的工作机制、以及Tomcat如何打破双亲委派,当然有一些东西分享的比较简单,比如 Tomcat 的类加载器这部分,没有提及整个 Tomcat的类加载器层次结构

    83500

    Java的类加载器种类(双亲委派)

    Java类加载器采用双亲委派模型: ? 1.启动类加载器:这个类加载器负责放在\lib目录中的,或者被-Xbootclasspath参数所指定的路径中的,并且是虚拟机识别的类库。...2.扩展类加载器:这个类加载器由sun.misc.Launcher$AppClassLoader实现。...它负责\lib\ext目录中的,或者被java.ext.dirs系统变量所指定的路径中的所有类库。用户可以直接使用。...3.应用程序类加载器:这个类由sun.misc.Launcher$AppClassLoader实现。是ClassLoader中getSystemClassLoader()方法的返回值。...它负责用户路径(ClassPath)所指定的类库。用户可以直接使用。如果用户没有自己定义类加载器,默认使用这个。 4.自定义加载器:用户自己定义的类加载器。 protected Class<?

    52230

    谈谈类加载器的双亲委派机制

    预定义类加载器和双亲委派机制 JVM预定义的三种类型类加载器: 启动(Bootstrap)类加载器:是用本地代码实现的类装入器,它负责将 /lib下面的类库加载到内存中...它负责将系统类路径(CLASSPATH)中指定的类库加载到内存中。开发者可以直接使用系统类加载器。 除了以上列举的三种类加载器,还有一种比较特殊的类型 — 线程上下文类加载器。...双亲委派机制描述 某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。...委托机制具体含义 当Java虚拟机要加载一个类时,到底派出哪个类加载器去加载呢? 首先当前线程的类加载器去加载线程中的第一个类(假设为类A)。...如果类A中引用了类B,Java虚拟机将使用加载类A的类加载器去加载类B。 还可以直接调用ClassLoader.loadClass()方法来指定某个类加载器去加载某个类。

    69400

    JVM类加载机制、双亲委派机制、自定义类加载器、打破双亲委派机制

    负责加载用户类路径(ClassPath)上所有的类库,如应用程序中没有默认自己的类加载器,则使用应用程序加载器为默认加载器。...2、双亲委派机制 双亲委派模型的工作过程是:如果一个类加载器收到了类加载请求,它首先不会自己尝试加载这个类,而是把这个请求委派给父类加载器去完成,每个层都是如此,因此所有加载请求最终都传送给顶层的启动类加载器...,只有父加载器反馈自己无法加载这个加载请求时(它的搜索范围没有找到所需的类),子加载器才会尝试自己去完成加载,双亲委派机制说简单点就是,先找父亲加载,不行再由儿子自己加载 好处 具备优先级的层次关系...,例如java.lang.Object类,它放在rt.jar之中,无论那个类加载器加载这个类,都会向上委派给模型的最顶端启动类加载器加载,因此Object类在程序的各个类加载器中都能保证是一个类,从而保证被加载类的唯一性...);中对应的类加载器就是AppClassLoader,满足双亲委派机制 4、打破双亲委派机制 例如在Tomact中部署多个项目,每个项目使用的相同但不用版本的组件 自定义类加载器,在加载类时,没有遵循双亲委派机制

    32230

    Tomcat 类加载器打破双亲委派模型

    这些类加载器之间的关系一般如下图所示: 图中各个类加载器之间的关系成为 类加载器的双亲委派模型(Parents Dlegation Mode)。...双亲委派模型要求除了顶层的启动类加载器之外,其余的类加载器都应当由自己的父类加载器加载,这里类加载器之间的父子关系一般不会以继承的关系来实现,而是都使用组合关系来复用父加载器的代码。...双亲委派模型的工作过程是:如果一个类加载器收到了类加载的请求,他首先不会自己去尝试加载这个类,而是把这个请求委派父类加载器去完成。...嘿嘿,有了线程上下文加载器,JNDI服务使用这个线程上下文加载器去加载所需要的SPI代码,也就是父类加载器请求子类加载器去完成类加载的动作,这种行为实际上就是打通了双亲委派模型的层次结构来逆向使用类加载器...我们前面说过: 双亲委派模型要求除了顶层的启动类加载器之外,其余的类加载器都应当由自己的父类加载器加载。

    1.9K30

    类加载:双亲委派机制

    类的生命周期 类加载器 双亲委派机制 类的生命周期 类从被加载到虚拟机开始,到卸载出内存为止,它的整个的生命周期包括:加载、连接(验证、准备、解析)、初始化、使用和卸载七个阶段。...Java语言实现,不属于虚拟机,全部继承自抽象类java.lang.ClassLoader 从Java开发者的角度看,需要了解类加载器的双亲委派模型,如下图所示: 启动类加载器Bootstrap...用户自定义的类加载器 用户在需要的情况下,可以实现自己的自定义类加载器,一般而言,在以下几种情况下需要自定义类加载器 隔离加载类。...类加载的双亲委派模型并不是强制的,用户可以根据需要在某个时间点动态加载类 扩展类加载源,例如从数据库、网络进行类加载 防止源代码泄露。...Java代码很容易被反编译和篡改,为了防止源码泄露,可以对类的字节码文件进行加密,并编写自定义的类加载器来加载自己的应用程序的类 双亲委派机制 向上委托,向下加载 如果一个类加载器收到了类加载的请求

    52510

    Java学习记录--委派模型与类加载器

    ClassLoader与委派模型 ClassLoader体系 ClassLoader顾名思义是类加载器(准确来说为JVM平台类加载器抽象父类),主要功能负责将Class加载到JVM中,其所使用的加载策略叫做双亲委派模型...是由C++实现的JVM内部的加载工具,其没有对应的Java对象,因此不在这个委派体系中,类加载器本质上是装饰者模式组合思想的应用....简单来说委托类优先模式保证了加载器的优先级问题,让优先级高的ClassLoader先加载,然后轮到优先级低的....ClassLoader的委派模型使得很容易扩展自定义的类加载器,那么基本步骤 定义自己的类加载器 -> 加载指定jar -> 创建所需要的应用实例,大概代码如下....AppClassLoader; 主要加载java.class.path下的类,包括用户定义的类 纠正双亲委派模型,实际上就是装饰者模式应用.

    61970

    【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 是根节点的 类加载器 ; 双亲委派机制 : 在双亲委派机制中...是根节点的类加载器 , 其尝试加载 Activity 类 , 发现加载不了 , 没有这个能力 , 然后 BootClassLoader 将任务 委派给子节点 PathClassLoader , PathClassLoader

    30430

    类加载器中的双亲委派模型详解

    从Java开发者的角度看,需要了解类加载器的双亲委派模型,如下图所示: ?...image-20191013135633962 双亲委派模型的工作过程 如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此...使用双亲委派模型来组织类加载器之间的关系,有一个显而易见的好处就是Java类随着它的类加载器一起具备了一种带有优先级的层次关系。...线程上下文加载器 如上所述,双亲委派模型很好得解决了各个类加载器的基础类的统一问题(越基础的类由越上层的加载器进行加载),如果基础类又要回调用户的类该怎么办?...有了线程上下文加载器,就可以解决上面的问题——父类加载器需要请求子类加载器完成类加载的动作,这种行为实际上就是打破了双亲委派的加载规则。 ?

    66520

    JVM —— 类加载器的分类,双亲委派机制

    继承关系图如上:ClassLoader类:定义了具体的行为模式,简单来说就是先从本地或者网络获得字节码信息,然后调用虚拟机底层的方法创建方法区和堆上的对象。...根据双亲委派机制,加载某一个类,先委托上一级的加载器进行加载,如果上级加载器也有上级,则会继续向上委托,如果该类委托上级没有被加载,子加载器尝试加载该类简单来讲:双亲委派机制的核心是解决一个类到底由谁进行加载的问题...,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式双亲委派机制-问题重复的类:如果一个类重复出现在三个类加载器的加载位置,应该由谁来加载...2.5 打破双亲委派机制打破双亲委派机制的三种方式:自定义类加载器自定义类加载器并且重写loadClass方法,就可以将双亲委派机制的代码去除Tomcat通过这种方式实现应用之间类隔离线程上下文加载器利用上下文类加载器加载类...有人认为他确实打破双亲委派机制:因为 DriveManager 由启动类加载器加载,却在记载过程中需要委派程序类加载器进行记载,打破了双亲委派机制的委派是从上到下的规则。

    9210

    Tomcat类加载器揭秘:“重塑”双亲委派模型

    Tomcat类加载器揭秘:“重塑”双亲委派模型在Java世界中,类加载器作为程序运行时动态加载类的基石,遵循着经典的双亲委派模型原则,这一设计确保了类的唯一性和安全性然而,在某些特殊应用场景下,如应用服务器领域...Tomcat如何以及为何要打破Java的双亲委派模型双亲委派模型先来复习下类加载器相关知识(也可以查看类加载器文章):JVM运行时遇到类需要检测类是否加载,如果未加载则将类信息加载到运行时的方法区并生成...,应用类加载器则常用于加载我们自定义的类扩展、应用类加载器由Java代码实现,组合为父子关系(不是继承)默认情况下类加载会使用双亲委派模型:进行类加载时将类交给父类尝试加载,如果父类不加载再由自己加载,...这种核心类库被篡改,它们由父类加载器进行加载,因此加载时找不到我们编写的main方法Tomcat类加载器既然双亲委派模型能够防止核心类库被篡改,那么Tomcat为啥还要打破双亲委派模型呢?...还是以前双亲委派模型代码)当前类加载器尝试类加载 findClass(name)(这里可能交给父类加载,比如之前说过的共享的SharedClassLoader)应用类加载器尝试加载 Class.forName

    15521

    类加载过程,双亲委派模型?

    1)如上图,其中每个类加载气都有自己对应加载的目标,比如说我们的Object,它是存放在rt.jar之中的,无论哪个类加载器要加载这一个类,最终都会委派到最顶端的启动类加载器,因此Object类在程序的各种类加载器环境中都是同一个类...这也就体现了双亲委派要解决的问题之一,就是防止重复加载导致冲突。导致程序一片混乱。...如果应用程序中没有自定义过自己的类加载器,这个就是一个Java程序中默认的类加载器。...用户自定义的类加载器:用户在需要的情况下,可以实现自己的自定义类加载器,一般而言,在以下几种情况下需要自定义类加载器: (1)隔离加载类。...类加载的双亲委派模型并不是强制的,用户可以根据需要在某个时间点动态加载类; (3)扩展类加载源,例如从数据库、网络进行类加载; (4)

    31710

    类加载机制 双亲委派模型

    双亲委派模型 模型如下图: 双亲委派模型中除了启动类加载器之外其余都需要有自己的父类加载器 当一个类收到了类加载请求时: 自己不会首先加载,而是委派给父加载器进行加载,每个层次的加载器都是这样。...所以最终每个加载请求都会经过启动类加载器。只有当父类加载返回不能加载时子加载器才会进行加载。...双亲委派的好处 : 由于每个类加载都会经过最顶层的启动类加载器,比如 java.lang.Object这样的类在各个类加载器下都是同一个类(只有当两个类是由同一个类加载器加载的才有意义,这两个类才相等。...如果没有双亲委派模型,由各个类加载器自行加载的话。...当用户自己编写了一个 java.lang.Object类,那样系统中就会出现多个 Object,这样 Java 程序中最基本的行为都无法保证,程序会变的非常混乱。

    20120

    类加载器的双亲委派模型_java mock 模拟接口

    JVM类加载器 JVM主要有以下几种类加载器: 引导类加载器 主要加载JVM运行核心类库,位于JRE的lib目录下,如rt.jar中的类。...扩展类加载器 主要加载JVM中扩展类,位于JRE的ext目录下。 应用程序类加载器 主要负责加载ClassPath路径下的类,也就是业务类。 自定义加载器 负责加载用户自定义路径下的类。...所以自定义类加载器的默认parent就是AppClassLoader。 双亲委派 在类加载流程中,首先调用的是Launcher.loader.loadClass()方法。...所以tomcat自定义类加载器,每个应用都有自己的类加载器,负责加载自己应用下的类,打破了双亲委派机制,不在让父加载器先加载。...在双亲委派模型下,类的加载是由下至上委托的,jdk无法加载其它文件夹下的类文件。

    79910

    JVM类加载&双亲委派-JVM(二)

    JVM类加载机制-JVM(一) 一、类加载和双亲委派机制 前面类加载主要通过类加载器实现,类加载器有这几种: 1、引导类加载器:负责加载支撑JVM运行的位于JRE的lib目录下核心类库,比如chaset.jar...(c++实现) 2、扩展类加载器:负责加载支撑JVM运行的位于jre的lib目录下的ext扩展目录中的jar类包。 3、应用程序加载器:负责加载classPath路径下的类包,主要加载自己写的类。...同理parentBootStrap就是加载器就是基类加载器,也是null。它的子类是ext加载器,ext的子类是app加载器,可以通过getSystemClassLoader来获取到。...这就是双亲委派设置导致如此的,因为每次加载会从他的父加载器去加载,当bootStrap从核心类库加载不到,才会依次让子加载器尝试加载。...这时候ExtClassLoader的父加载器是null,这时候走下面findBootstrap引导类加载器。 这时bootStrap类加载器肯定返回null。 于是开始进入findClass。

    14810

    JVM学习笔记(二)类加载器及双亲委派机制

    3、类加载器 作用:加载Class文件。...1、虚拟机自带的加载器 2、启动类(根)加载器【BOOT】 3、扩展类加载器【EXT】 4、应用程序加载器【APP】 注:从4到1进行加载 1、双亲委派 解释:双亲委派机制(安全)...:APP—>EXT—>BOOTSTRAP【最终执行】 类加载器收到类加载的请求 将这个请求向上委托为父类加载器去完成,一直向上委托,直到启动类加载器 启动类加载器检查是否能够加载当前的这个类...(也就是双亲委派的优点) ①双亲委派机制使得类加载出现层级,父类加载器加载过的类,子类加载器不会重复加载,可以防止类重复加载; ②使得类的加载出现优先级,防止了核心API被篡改,提升了安全,所以越基础的类就会越上层进行加载...如何打破双亲委派? ①自定义类加载器,重写loadClass方法 ②使用线程上下文类加载器

    28210

    Java虚拟机类加载器及双亲委派机制

    本篇文章我们重点介绍加载器和双亲委派机制。...因此,启动类加载器不属于Java类库,无法被Java程序直接引用,用户在编写自定义类加载器时,如果需要把加载请求委派给引导类加载器,那直接使用null代替即可。...Thread.currentThread().setContextClassLoader(this.loader); //... } 双亲委派模型 双亲委派模型:当一个类加载器接收到类加载请求时...通过双亲委派模型,对于Java核心库的类的加载工作由启动类加载器来统一完成,保证了Java应用所使用的都是同一个版本的Java核心库的类,是互相兼容的。...》 《面试官,不要再问我“Java 垃圾收集器”了》 《Java虚拟机类加载器及双亲委派机制》

    58320
    领券