类加载器(ClassLoader)
一、类加载器(ClassLoader)
1.1 什么是类加载器
Java的类加载器是Java虚拟机(JVM)的重要组成部分,它的主要作用是动态地将Java类加载到JVM中,以便在运行时使用这些类。Java类加载器通常是由JVM的实现者提供的,但用户也可以通过扩展ClassLoader类来定义自己的类加载器。
Java类加载器采用了双亲委派模型,即在加载一个类时,会先由父类加载器尝试加载该类,如果父类加载器无法加载,则交给子类加载器去尝试加载。这样可以确保Java类的唯一性,同时也可以防止Java类库被恶意篡改。
Java类加载器可以分为三个层次:启动类加载器、扩展类加载器和应用程序类加载器。启动类加载器是JVM的一部分,用于加载Java核心类库,扩展类加载器用于加载JVM扩展的一些API,而应用程序类加载器则用于加载应用程序中的类。
1.2 类加载器的三个层次
- 启动类加载器
启动类加载器(Bootstrap ClassLoader)是Java虚拟机的一部分,是用本地代码实现的类加载器,主要用于加载JRE/lib目录下的核心Java类库,如rt.jar、charsets.jar等。启动类加载器是Java虚拟机最顶层的类加载器,它没有父类加载器。
启动类加载器使用C++编写,因此无法在Java代码中获取到它的引用。启动类加载器加载的类不受限于类路径的限制,因为它在Java虚拟机启动时就已经被加载了。
- 扩展类加载器
扩展类加载器(Extension ClassLoader)是由Java代码实现的类加载器,它的父类加载器是启动类加载器。扩展类加载器用于加载Java扩展API,这些API通常存放在JRE/lib/ext目录下,如jconsole.jar、jmxremote.jar等。
扩展类加载器在Java虚拟机启动时会被创建,它的类加载路径可以通过系统属性java.ext.dirs来指定。如果要使用自定义的扩展类加载器,也可以通过设置java.system.class.loader系统属性来指定。
- 应用程序类加载器
应用程序类加载器(Application ClassLoader),也称为系统类加载器(System ClassLoader),是Java虚拟机中最常用的类加载器,它的父类加载器是扩展类加载器。应用程序类加载器用于加载应用程序中的类,通常存放在CLASSPATH环境变量或者-cp命令指定的目录下。
当Java虚拟机需要加载一个类时,会先让应用程序类加载器尝试加载该类,如果应用程序类加载器无法加载,则会依次由其父类加载器进行加载,直到启动类加载器为止。
如果应用程序类加载器的父类加载器无法找到某个类,应用程序类加载器也无法加载该类,因为Java类加载器采用双亲委派模型,即父类加载器优先委派给子类加载器进行加载。
- 其他
类加载器可以通过getClassLoader()方法获取到:
例如:
public class TestClassLoader {public static void main(String[] args) {System.out.println(TestClassLoader.class.getClassLoader());System.out.println(TestClassLoader.class.getClassLoader().getParent());System.out.println(TestClassLoader.class.getClassLoader().getParent().getParent());}
}
结果:
jdk.internal.loader.ClassLoaders$AppClassLoader@2437c6dc
jdk.internal.loader.ClassLoaders$PlatformClassLoader@58ceff1
null
由此可见应用程序类加载器和扩展类加载器都可以被获取到,而启动类加载器因为是由C++所编写的所以获取时为空;
加载特性:
自顶向下尝试加载,自底向上检查是否加载成功;
类加载器(ClassLoader)相关推荐
- Java虚拟机学习 - 类加载器(ClassLoader)
类加载器 类加载器(ClassLoader)用来加载 class字节码到 Java 虚拟机中.一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源文件在经过 Javac之后就被转换成 ...
- 【Android 逆向】类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 拷贝 DEX 文件到内置存储 | 加载并执行 DEX 字节码文件 )
文章目录 一.拷贝 Assets 目录下的 classes.dex 字节码文件到内置存储区 二.加载 DEX 文件并执行其中的方法 三.MainActivity 及执行结果 四.博客资源 一.拷贝 A ...
- 【Android 逆向】类加载器 ClassLoader ( Android 的八种类加载器 | ClassLoader | BaseDexClassLoader | DexClassLoader )
文章目录 一.Android 类加载器 1.ClassLoader 抽象类 2.BootClassLoader 3.BaseDexClassLoader 4.PathClassLoader 5.Dex ...
- 【Android 逆向】类加载器 ClassLoader ( 启动类加载器 | 扩展类加载器 | 应用类加载器 | 类加载的双亲委托机制 )
文章目录 一.类加载器 二.类加载的双亲委托机制 一.类加载器 Java 虚拟机 ClassLoader 类加载器 : Bootstrap ClassLoader : 启动类加载器 , 该 加载器由 ...
- java类加载器_类加载器ClassLoader
上篇文章说到,Class类可以通过一个类的全限定名去加载类,那么底层是如何去加载的呢?这就是我们今天要聊的类加载器ClassLoader,其可以通过一个类的全限定名来获取描述此类的二进制字节流,也即是 ...
- JVM之类加载器ClassLoader
JVM之类加载器ClassLoader 本文目录 JVM简介 类加载器解析 1. JVM简介 ①. JVM是运行在操作系统之上的,它与硬件没有直接的交互 ②. JVM体系结构概览 注: 2. 类装载器 ...
- 类加载器ClassLoader的角色
类加载器ClassLoader的角色
- Java 程序执行过程的内存流程图(结合类加载器 ClassLoader 讲解)
Student s = new Student(); s.play(); Student s2 = new Student(); 以上代码的执行流程如下: JVM 作为操作系统的一个迚程在系统中执行, ...
- 类加载器ClassLoader
类加载器ClassLoader 基本介绍 与普通程序不同的是.Java程序(class文件)并不是本地的可执行程序.当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Java class ...
- java的类加载器ClassLoader
类在执行之前会执行三个步骤:加载 -> 连接 -> 初始化 1.java中类的加载 java 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方 ...
最新文章
- 汇集82万开发者,拿下7项世界冠军的科大讯飞有何魅力?
- php-fpm的pool、php-fpm慢执行日志、open_basedir、php-fpm进程管理
- ftp 工具_ftp工具,ftp工具如何下载使用?Linux如何配置ftp服务器?
- php开发app接口教学,php开发App接口
- RuoYi(分离版) 使用代码生成器添加子模块(idea版)
- mysql 5.7.12 修改密码
- Android进程优先级architecture : low memory killer (/system/core/lmkd/lmkd.c)
- 雨滴桌面时间插件_Win10美化向——如何搭配你的桌面
- cocosBuilder使用总结
- 前端开发之谷歌实用插件fehelper JSON助手
- VB显示透明FLASH效果
- php安装Laravel框架 全过程 傻瓜式教学
- #Redis数据库-思维导图
- safenet 超级狗 加密狗
- 基于Processing的躲避球游戏
- 【JS Web 前端知识库】6.说一说BFC
- Goland 1.15运行报错:该版本的 %1 与你运行的 Windows 版本不兼容
- PHP套件的实验结果分析,PHP环境搭建套件评比测 | Wopus
- Canvas百战成神-圆(1)
- IPv6技术精要(第2版)Rick Graziani
热门文章
- 世界四大名刊Cell,Nature,Science,PNAS
- 超级科学计算机bug,10%+10%=0.11?一个隐藏的BUG!手机计算器几乎全算错!
- 杭电 HDU 1248 Java寒冰王座
- 耐克人脸识别_人脸识别启动,全系9个车型随意选,买它立马有1.2万现金拿
- GANSYNTH(基于对抗性神经网络的音频合成)
- 3D游戏编程:第5次作业
- 19篇顶会论文探索多模态情感识别前沿进展
- 继电器学习笔记(二)---继电器主要参数(结合宏发继电器HF32FV-G 规格书)
- 设计比赛-我图杯原创设计比赛_我图网www.ooopic.com_第一期:中国风原创设计比赛
- 视频文件怎样进行压缩缩小