44_类加载器及其委托机制的深入分析

  • 什么是类加载器?------->加载类的工具
  • 类加载器做了些什么事情?------>从硬盘把.class加载到内存,并做了一些处理,处理完成后得到的就是字节码。
  • Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:

BootStrap、ExtClassLoader、AppClassLoader

  • 类加载器也是Java类,因为其他是java类的加载器本身也要被类加载器加载,显然必须有一个类加载器不是java类,这就是BootStrap。

BootStrap是虚拟机内核的一段C++代码,负责加载一些核心java类。

  • Java虚拟机中的所有类装载器采用具有父子关系的树形结构进行组织,在实例化每个类加载器对象时,需要为其指定一个父级类装载器对象或者默认采用系统类加载器为其父级类加载。

 

 

 

 

 

 

类加载器的委托机制--有效避免重复加载同一.class

  • 当前线程加载A类以及A类中引用到的B,C,D…等类
  • 当前线程指定的ClassLoader是AppClassLoader,那么查找的顺序是这样的:
  1. AppClassLoader先不找class,先找爸爸ExtClassLoader—>ExtClassLoader先不找.class,先找爸爸BootStrap—>BootStrap没有爸爸了,则找.class

找到了,ok,并记录已经加载过A类

没找到,推给儿子ExtClassLoader

             儿子ExtClassLoader找到,ok,并记录已经加载过A类

             儿子ExtClassLoader未找到 ,推给孙子AppClassLoader

                                                                                    孙子AppClassLoader 找到,ok,并记录已经加载过A类

                                                                                   孙子AppClassLoader 没有找到,抛出异常ClassNotFoundException

时间: 2024-10-18 16:19:37

44_类加载器及其委托机制的深入分析的相关文章

类加载器及其委托机制的深入分析

Java虚拟机可以安装多个类加载器,系统默认三个主要的类加载器,每个加载器负责加载特定位置的类: BootStrap,ExtClassLoader,AppClassLoader. 类加载器本身也是一个Java类,因为其他Java类的类加载器本身也要被类加载器加载,所以肯定有一个类加载器不是Java类,这便是BootStrap,BootStrap嵌套在JVM内核中.Java虚拟机中所有类装载器采用具有父子关系的树形结构进行组织,在实例化每个类装载器对象时,需要为其指定一个父级类装载器对象或者默认采

java类加载器及其委托机制

1.什么是类加载器,类加载器父子结构.BootStrap-->ExtClassLoader-->AppClassLoader,级别依次降低 2.类加载器之间的父子关系和管辖范围 3.类加载器的委托机制.当前加载器加载类,先通过上级加载器加载,若上级无法加载,只能当前加载器加载,不能由下级加载器加载

第十二章 类加载器和反射机制

12 类加载器和反射机制 12.1 类加载器 负责将.class文件加载到内存中,并为之生成对应的Class对象. 1.类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载.连接.初始化三个步骤来实现对这个类的初始化. 加载 就是指将calss文件读入到内存,并为之穿件一个Class对象. 任何类被使用时系统都会建立一个Class对象. 连接 验证    是否有正确的内部结构,并和其他类协调一致 准备    负责为类的静态成员分配内存,并设置默认初始化值 解析    将类

类加载的父亲委托机制

我们都知道.类加载器用来把类加载到java虚拟机.从JDK2.0开始,类的加载过程采用父亲委托机制.JVM的ClassLoader采用的是树形结构,除了根类加载器以外,每个ClassLoader都会有且仅有一个父类加载器,用户自定义的ClassLoader默认的父类加载器是系统类加载器,当然你可以自己指定需要用个ClassLoader的实例,我们来看他们的父子关系: 父类委托机制中,当一个java程序请求加载器loader1加载Hello类时,loader1首先委托自己的父亲加载器加载hello

java 类加载器   双亲委派机制

先上图,看一下加载器. 1.BootStrapClassLoader:启动类加载器,该ClassLoader是在启动时候创建的,是写在JVM内核里的,它不是一个字节码文件,是由c++编写的二进制代码,所以开发者无法获取到该启动类的引用,也就不能通过引用来进行操作.这个加载器是加载$JAVA_HOME/jre/lib下面的类库(或者通过参数-Xbootclasspath指定). 2.EXTClassLoader:扩展类加载器,ExtClassLoader会加载 $JAVA_HOME/jre/lib

类加载器-双亲委托

双亲委托(代理)模型:当类加载器收到加载类或资源的请求时,通常都是先委托给父类加载器加载,当父类加载器找不到指定类或资源时,会委托给始祖类加载器进行加载,始祖类加载器也找不到资源的话,自身才会执行实际的类加载过程.

类加载器的深入讲解与应用

第8单元:类加载器的深入讲解与应用 第8单元:类加载器的深入讲解与应用 第8单元:类加载器的深入讲解与应用 44.类加载器及其委托机制的深入分析 package java_5; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOExc

java高新技术-类加载器

1.类加载器及委托机制的深入分析 > 类加载器的作用:一个java文件中的出现的类,首先要把这个类的字节码加载到内存中,这个类的信息放在硬盘的classPath下的class文件中,  把class文件中的内容加载到内存中去,在进行一些处理,处理完的结果就是字节码,这一系列工作是类加载器在做. > Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:    BootStrap,ExtClassLoader, AppClassLoader > 类加载

Java类加载器的工作原理

Java类加载器的作用就是在运行时加载类.Java类加载器基于三个机制:委托.可见性和单一性.委托机制是指将加载一个类的请求交给父类加载 器,如果这个父类加载器不能够找到或者加载这个类,那么再加载它.可见性的原理是子类的加载器可以看见所有的父类加载器加载的类,而父类加载器看不到子类 加载器加载的类.单一性原理是指仅加载一个类一次,这是由委托机制确保子类加载器不会再次加载父类加载器加载过的类.正确理解类加载器能够帮你解决 NoClassDefFoundError和java.lang.ClassNo