首页 > 其他分享 >类加载器

类加载器

时间:2023-04-25 21:12:40浏览次数:35  
标签:类库 Java lib 虚拟机 ClassLoader 加载

类与类加载器

任意一个类,都由加载它的类加载器和这个类本身一同确立其在 Java 虚拟机中的唯一性,每一个类加载器,都有一个独立的类名称空间。
因此,比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个 Class 文件,被同一个虚拟机加载,只要加载它们的类加载器不同,那么这两个类就必定不相等。
这里的“相等”,包括代表类的 Class 对象的 equals() 方法、isInstance() 方法的返回结果,也包括使用 instanceof 关键字做对象所属关系判定等情况。

双亲委派模型

站在Java虚拟机的角度来看,只存在两种不同的类加载器:一种是启动类加载器,这个类加载器由C++语言实现,是虚拟机自身的一部分;另一种就是其他所有的类加载器,这些类加载器由Java语言实现,独立存在于虚拟机外部,并且全部继承来自抽象类java.lang.ClassLoader。
站在Java开发人员的角度来看分为以下三种:

  • 启动类加载器(Bootstrap ClassLoader): 负责将存放在 <JAVA_HOME>\lib 目录中的,并且能被虚拟机识别的(仅按照文件名识别,如 rt.jar,名字不符合的类库即使放在 lib 目录中也不会被加载)类库加载到虚拟机内存中。
  • 扩展类加载器(Extension ClassLoader): 负责加载 <JAVA_HOME>\lib\ext 目录中的所有类库,开发者可以直接使用扩展类加载器。
  • 应用程序类加载器(Application ClassLoader): 由于这个类加载器是 ClassLoader 中的 getSystemClassLoader() 方法的返回值,所以一般也称它为“系统类加载器”。它负责加载用户类路径(classpath)上所指定的类库,开发者可以直接使用这个类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。

还有可以自定义类加载器。
image
双亲委派模型的工作过程是:如果一个类加载器收到了类加载的请求,它首先不会自己取尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因为所有的加载请求最终都应该传送到最顶层的启动类加载器中,只用当符加载器反馈自己无法完成这个加载请求(它的搜索范围没有找到所需的类)时,子加载器才会尝试自己去完成加载。

破坏双亲委派模型

标签:类库,Java,lib,虚拟机,ClassLoader,加载
From: https://www.cnblogs.com/xiaoovo/p/17353881.html

相关文章

  • 类加载机制
    什么是类加载机制Java虚拟机在把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程称作虚拟机的类加载机制。类加载的时机一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,他的整个生命周期将会经历以......
  • video标签如何加快加载速度
    视频标签(<video>)加载速度的优化可以从以下几个方面入手:压缩视频文件大小:可以使用视频压缩工具来压缩视频文件大小。压缩后的视频文件大小更小,加载速度更快。使用适当的视频格式:不同的浏览器支持不同的视频格式。因此,可以使用流行的视频格式,如MP4、WebM和Ogg,以确保视频在各种......
  • Cesium加载ArcGIS Server4490且orgin -400 400的切片服务
    Cesium在使用加载Cesium.ArcGisMapServerImageryProvider加载切片服务时,默认只支持wgs84的4326坐标系,不支持CGCS2000的4490坐标系。如果是ArcGIS发布的4490坐标系的切片服务,如果原点在orginX:-180.0Y:90.0的情况下,我们可以通过WebMapTileServiceImageryProvider按照WMTS的方式......
  • VUE - 加载图片
    VUE-加载图片 方式1:<template><divstyle="width:100%;height:100%"><img:src="addjpg":data-source="addjpg"alt=""/></div></template><script>importaddjpgfro......
  • 给el-table或给el-select添加懒加载
    1、在组件上写上自定义事件的名称 v-el-table-tableLazy="tableLazy"或 v-el-select-selectLazy="selectLazy"2、在exportdefault内上自定义事件指令directives:{    "el-select-selectLazy":{      bind(el,binding){       ......
  • 无法加载源 https://api.nuget.org/v3/index.json 的服务索引
    .net6之后,不会随项目生成packages文件夹,将项目拷贝到无联网的电脑上用VS打开时,会出现nuget还原失败的情况,只需要把原电脑中的用户文件夹下的.nuget文件夹拷贝过去,放到对应路径下即可......
  • jvm之线程上下文加载器与SPI
    线程上下文加载器线程上下文类加载器(ThreadContextClassLoader,简称TCCL)是从JDK1.2开始引入的。类java.lang.Thread中的方法getContextClassLoader()和setContextClassLoader(ClassLoadercl)用来获取和设置线程的上下文类加载器。如果没有通过setContextClassLoader(ClassLoader......
  • 类的加载过程
    类的加载过程类的加载指的是将类的.class文件中的二进制数据读入到内存中,然后在堆区创建一个这个类的java.lang.Class对象。类的加载的最终产品是位于堆区中的Class对象。Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。一个java文件......
  • Vue设置默认加载页面,去掉地址栏#号
     {path:'/',component:Login,//想默认启动的页面},mode:"history"//去掉地址栏的#号 ......
  • 类加载与卸载
    加载过程  其中验证,准备,解析合称链接加载通过类的完全限定名,查找此类字节码文件,利用字节码文件创建Class对象.验证确保Class文件符合当前虚拟机的要求,不会危害到虚拟机自身安全.准备进行内存分配,为static修饰的类变量分配内存,并设置初始值(0或null).不包含final修......