022-JVM-各类加载器加载哪些类?(类加载器的势力范围)
上一篇:021-JVM-双亲委派机制
https://yuhongliang.blog.csdn.net/article/details/111565510
- 上篇说到各类加载器再第二次得到加载一个类的时候,会在自己的视力范围内查找这个类是否存在,如果存在就加载,如果不存在就给自己孩子传出去。
- 第一次拿到的时候需要给自己的爸爸,当然了bootstrapClassLoader没有爸爸,就是第一次拿到的时候了。
那么这三个类加载器的实例范围,或者首查找的范围是什么?
1. BootStrapClassLoader的实例范围在sun.boot.class.path中
2. ExtClassLoader的实例范围在java.ext.dirs中
3. AppClassLoader的实例范围在java.class.path中
4. 这些key的背后都要哪些类呢?
下面的列子可以看出具体类的情况,让你不再疑惑
4.1 测试代码
package com.yuhl.classload;/*** @author yuhl* @Date 2020/12/22 13:17* @Classname getClassLoaderDetail* @Description 查看ClassLoader都加载了那些*/
public class getClassLoaderDetail {public static void main(String[] args) {String pathBoot = System.getProperty("sun.boot.class.path");System.out.println("BootStrapClassLoader实例范围开始--------------------");System.out.println(pathBoot.replaceAll(";", System.lineSeparator()));System.out.println("BootStrapClassLoader实例范围结束--------------------");System.out.println("ExtClassLoader实例范围开始--------------------");String pathExt = System.getProperty("java.ext.dirs");System.out.println(pathExt.replaceAll(";", System.lineSeparator()));System.out.println("ExtClassLoader实例范围结束--------------------");System.out.println("AppClassLoader实例范围开始--------------------");String pathApp = System.getProperty("java.class.path");System.out.println(pathApp.replaceAll(";", System.lineSeparator()));System.out.println("AppClassLoader实例范围结束--------------------");}
}
4.2 测试结果
BootStrapClassLoader实例范围开始--------------------
C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\sunrsasign.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar
C:\Program Files\Java\jdk1.8.0_201\jre\classes
BootStrapClassLoader实例范围结束--------------------ExtClassLoader实例范围开始--------------------
C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext
C:\WINDOWS\Sun\Java\lib\ext
ExtClassLoader实例范围结束--------------------AppClassLoader实例范围开始--------------------
C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\deploy.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\javaws.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfxswt.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\management-agent.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\plugin.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar
C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar
D:\AA\JVM\out\production\Jvm2020
C:\Program Files\JetBrains\IntelliJ IDEA 2020.1\lib\idea_rt.jar
AppClassLoader实例范围结束--------------------Process finished with exit code 0
5. 总结
- 由来自己的实例范围,当需要去加载某个类的时候就会扫描自己的势力范围,如果在则加载,如果不在就给孩子。
- 需要说明的是这里类肯定在内存中没有,才会被加载,如果内存中已经有了则不会被二次加载。
下一篇:023-JVM-类加载器源码分析https://yuhongliang.blog.csdn.net/article/details/111566920
022-JVM-各类加载器加载哪些类?(类加载器的势力范围)相关推荐
- JVM学习02——内存加载过程(类加载器)
类加载器 一.效果 class文件被load进内存,同时生成一个Class类的对象,可以用这个Class对象指向这块内容.(class类的对象不是new出来的,是hotspot中C++代码load出来 ...
- 自定义类加载器加载冲突类(一)-ClassLoader
使用场景:项目中遇到使用不同版本的类时候因为同路径同名类的冲突可以使用自定义类加载器进行加载规避这一问题 相关代码如下: 代码 1. 类加载器: import java.io.File; import ...
- Android进阶:十三、自定义类加载器加载加密类文件
之前面试的时候有许多面试官问类加载器相关的问题,所以这是一个很重要的知识点.而且对于高级Android研发来讲,懂得更多类加载相关的东西,对开发也会有很多的帮助,比如热更新,类加密等. 其实笔者对类加 ...
- 28 Java类的加载机制、什么是类的加载、类的生命周期、加载:查找并加载类的二进制数据、连接、初始化、类加载器、双亲委派模型、自定义类加载器
28Java类的加载机制 28.1.什么是类的加载 28.2.类的生命周期 28.2.1.加载:查找并加载类的二进制数据 28.2.2.连接 28.2.3.初始化 28.3.类加载器 28.4.类的加 ...
- JVM学习笔记之-类加载子系统,类的加载与类的加载过程,双亲委派机制
一 类加载器与类加载过程 类加载子系统作用 类加载器子系统负责从文件系统或者网络中加载class文件,class文件在文件开头有特定的文件标识. ClassLoader只负责class文件的加载,至于 ...
- 错误: 找不到或无法加载主类 helloworld_你还不知道Java的类加载机制?
上篇分析完一个class文件后,我们再来回答几个问题 一.面试题 1.什么是类的加载 ...
- java加载顺序_类加载过程中几个重点执行顺序整理
正文前先来一波福利推荐: 福利一: 百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家. 福利二: 毕业答辩以及工 ...
- java 字节码加载_java面试题jvm字节码的加载与卸载
虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换分析和初始化,最终形成可以被虚拟节直接使用的JAVA类型,这就是虚拟机的类加载机制. 类从被加载到虚拟机内存到卸载出内存的生命周期 ...
- java加载并运行虚拟机_《深入理解Java虚拟机》- Java虚拟机是如何加载Java类的?...
Java虚拟机是如何加载Java类的? 这个问题也就是面试常问到的Java类加载机制.在年初面试百战之后,菜鸟喜鹊也是能把这流程倒背如流啊!但是,也只是字面上的背诵,根本就是像上学时背书考试一样. ...
最新文章
- 在 Ubuntu 14.04 Chrome中安装Flash Player(转)
- Python 正则表达式
- 私有云Opetstack的创建与运用
- 精简 opencv python_01_opencv_python_基本图像处理
- 亲测有用的音乐推荐网站
- StringToInt
- ocelot简单入门
- zoom怎么解除静音_ZOOM视频软件使用指南(学生端)
- HTML用ONMOUSEOVER,ONMOUSEOUT改变背景色或背景图片的方法
- static在实例Extends、Overload中理解
- 简述力法计算弹性固定无铰拱的原理_隧道结构力学计算5页
- Python 基础变量声明
- 运行Rundll.exe
- 修复Windows 10远程桌面复制粘贴不了的5种方法
- 加密、解密、数字签名和数字证书概念详解
- 2021年危险化学品生产单位安全生产管理人员最新解析及危险化学品生产单位安全生产管理人员作业模拟考试
- 谷歌地球桌面版Google earth pro连不上服务器,地点备份
- 全志XR829 WIFI和BT模块在T7 Android8.1上调试
- 精读《Excel JS API》
- 椭圆加密算法(ECC加密)原理及应用