十一、类加载器的作用

article/2025/9/18 7:15:35

狂神说Java:https://www.bilibili.com/video/BV1p4411P7V3

1、类加载的作用

class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象,作为方法区中类数据的访问入口

2、类缓存

标准的JavaSE类加载器可以按要求查找类,但是一旦某个类被加载到类加载器中,它将维持加载(缓存)一段时间。不过JVM垃圾回收机制可以回收这些Class对象。

3、类加载流程

类加载过程

4、类加载器的类型

类加载器作用是把类(class)装载近内存的。JVM规范定义了如下类型的类的加载器。

  • 引导类加载器:用C++编写的,是JVM自带的类加载器,负责Java平台核心库,用来装载核心类库。该加载类无法直接获取。
  • 扩展类加载器:负责jre/lib/ext目录下的jar包或-D java.ext.dirs指定目录下的jar包装入工作库。
  • 系统类加载器:负责java -classpath或-D java.class.path所指的目录下的类与jar包装入工作库,是最常用的加载器。

类加载器的类型

/*** @Description TODO* @Author Administrator* @Date 2020/12/2 10:25*/
public class Test07 {public static void main(String[] args) throws ClassNotFoundException {// 获取系统类的加载器ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();System.out.println(systemClassLoader);// 获取系统类的加载器的父类 --> 扩展类加载器ClassLoader parent = systemClassLoader.getParent();System.out.println(parent);// 获取扩展类加载器的父类 --> 引导类加载器ClassLoader parent1 = parent.getParent();System.out.println(parent1);// 当前类是哪个类加载器ClassLoader classLoader = Class.forName("com.hejin.reflection.Test07").getClassLoader();System.out.println(classLoader);// jdk内置类classLoader = Class.forName("java.lang.Object").getClassLoader();System.out.println(classLoader);// 如何获取系统类加载器可以加载的路径String path = System.getProperty("java.class.path");System.out.println(path);}
}

结果

sun.misc.Launcher$AppClassLoader@18b4aac2
sun.misc.Launcher$ExtClassLoader@1540e19d
null
sun.misc.Launcher$AppClassLoader@18b4aac2
null
D:\Java\jdk1.8.0_121\jre\lib\charsets.jar;
D:\Java\jdk1.8.0_121\jre\lib\deploy.jar;
D:\Java\jdk1.8.0_121\jre\lib\ext\access-bridge-64.jar;
D:\Java\jdk1.8.0_121\jre\lib\ext\cldrdata.jar;
D:\Java\jdk1.8.0_121\jre\lib\ext\dnsns.jar;
D:\Java\jdk1.8.0_121\jre\lib\ext\jaccess.jar;
D:\Java\jdk1.8.0_121\jre\lib\ext\jfxrt.jar;
D:\Java\jdk1.8.0_121\jre\lib\ext\localedata.jar;
D:\Java\jdk1.8.0_121\jre\lib\ext\nashorn.jar;
D:\Java\jdk1.8.0_121\jre\lib\ext\sunec.jar;
D:\Java\jdk1.8.0_121\jre\lib\ext\sunjce_provider.jar;
D:\Java\jdk1.8.0_121\jre\lib\ext\sunmscapi.jar;
D:\Java\jdk1.8.0_121\jre\lib\ext\sunpkcs11.jar;
D:\Java\jdk1.8.0_121\jre\lib\ext\zipfs.jar;
D:\Java\jdk1.8.0_121\jre\lib\javaws.jar;
D:\Java\jdk1.8.0_121\jre\lib\jce.jar;
D:\Java\jdk1.8.0_121\jre\lib\jfr.jar;
D:\Java\jdk1.8.0_121\jre\lib\jfxswt.jar;
D:\Java\jdk1.8.0_121\jre\lib\jsse.jar;
D:\Java\jdk1.8.0_121\jre\lib\management-agent.jar;
D:\Java\jdk1.8.0_121\jre\lib\plugin.jar;
D:\Java\jdk1.8.0_121\jre\lib\resources.jar;
D:\Java\jdk1.8.0_121\jre\lib\rt.jar;
E:\code\Java\注解和反射\target\classes;
D:\Program Files\JetBrains\IntelliJ IDEA 2019.3.4\lib\idea_rt.jarProcess finished with exit code 0

http://chatgpt.dhexx.cn/article/IbABmcv3.shtml

相关文章

2.类加载器

回顾 上一节我们学习了JVM类加载机制,我们学习到大概的过程:通过类加载器将编译好的class文件加载到JVM进程中,通过字节码执行引擎去执行代码。这只是一个整体的过程,具体的细节我们从本节开始分析。 通过本节我们将掌握以下知识&…

Java类加载器

一.类的生命周期 1. 加载(Loading):找 Class 文件 1. 通过一个类的全限定名来获取定义此类的二进制字节流。 2.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。 3.在内存中生成一个代表这个类的java.lang.Class对象&#xf…

Java类加载器的使用

Java类加载器 classloader顾名思义,即是类加载。虚拟机把描述类的数据从class字节码文件加载到内存,并对数据进行检验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 先认识一下类加载…

JVM 类加载器

什么是类加载器 类加载器负责在运行时将Java类动态加载到Java虚拟机,他们也是JRE(Java运行时环境)的一部分。因此,借助类加载器,JVM无需了解底层文件或文件系统即可运行Java程序。此外,这些Java类不会一次…

类加载器深入理解

虚拟机设计团队把类加载阶段中“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的模块称为“类加载器”。 类加载器在类层次划分、OSGI、热部署、代码加密等领域…

java获取类加载器

获取类加载器的方法: //扩展类加载器MainClassLoader classLoader MainTest.class.getClassLoader();//表示当前线程的类加载器——应用程序类加载器ClassLoader contextClassLoader Thread.currentThread().getContextClassLoader();//—启动类加载器ClassLoader systemClas…

类加载器的种类

类加载器的种类有四种,如下图所示: 1.启动类加载器(引导类加载器,Bootstrap ClassLoader) 这个类加载使用C/C语言实现的,嵌套在JVM内部它用来加载Java的核心库(JAVA_HOME/jre/lib/rt.jar、res…

Java类加载器详解

1 特点 双亲委派: 如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载…

【类加载器】java类加载器

类装载器ClassLoader(一个抽象类) 描述一下JVM加载class文件的原理机制 类装载器就是寻找类或接口字节码文件进行解析并构造JVM内部对象表示的组件,在java中类装载器把一个类装入JVM,经过以下步骤: 1、装载&#xff…

什么是类加载器?

类加载器 什么是类加载器,作用是什么? 类加载器就是加载字节码文件(.class)的类 Java语言是一种具有动态性的解释语言,类(CLASS) 只有被加载到 JVM 中后才能运行。当运行指定程序时,JVM会将编译生成的.class文件按照需求和一定的规…

类加载器

类加载过程 加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。 类加载器分类 JVM 中内置了三个重要的 ClassLoader,除了 BootstrapClassLoader 其他类加载器均由 Java 实现且全部继承自java.lang.ClassLoader: 启动类加载器&…

类加载器作用

深入探讨 Java 类加载器 成 富, 软件工程师, IBM 中国软件开发中心 成富任职于 IBM 中国软件开发中心,目前在 Lotus 部门从事 IBM Mashup Center 的开发工作。他毕业于北京大学信息科学技术学院,获得计算机软件与理论专业硕士学位。他的个人网站是 http:…

java中的类加载器

文章目录 前言,一、加载器的作用是什么二、详解类加载器1.不得不说的双亲委派机制2.各个加载器加载的内容3.线程上下文类加载器4.类加载器的庐山真面目 总结 前言, java中一般来说有三种类加载器,分别为: 引导加载器,扩展加载器,应用加载器,还有一个线程上下文类加载器 一、加…

JVM类加载器

文章目录 一、类加载器二、类与类加载器三、双亲委派模型四、破坏双亲委派模型4.1、Tomcat4.1.1、WebApp类加载器4.1.2、Shared类加载器4.1.3、Catalina类加载器4.1.4、Common类加载器4.1.5、Jsp类加载器 4.2、JDBC 一、类加载器 从Java虚拟机的角度来讲,只存在两种…

自定义类加载器

目录 一、为什么要自定义类加载器? 二、常见的场景 三、实现方式 四、自定义类加载器示例 五、Java9新特性 一、为什么要自定义类加载器? 隔离加载类 在某些框架内进行中间件与应用的模块隔离,把类加载到不同的环境。比如:…

类加载器详解(自己实现类加载器)

目录&#xff1a; java虚拟机汇总 class文件结构分析 1).class文件常量池中的常量项结构 2). 常用的属性表的集合类加载过程 1).类加载器的原理以及实现<< 现在位置虚拟机结构分析 1).jdk1.7和1.8版本的方法区构造变化 2).常量池简单区分对象结构分析 1).压缩指针详解gc…

JVM——自定义类加载器

0. 为什么需要自定义类加载器 网上的大部分自定义类加载器文章&#xff0c;几乎都是贴一段实现代码&#xff0c;然后分析一两句自定义ClassLoader的原理。但是我觉得首先得把为什么需要自定义加载器这个问题搞清楚&#xff0c;因为如果不明白它的作用的情况下&#xff0c;还…

JVM - 类加载器

# 类加载器及类加载器执行过程 JDK版本&#xff1a;1.8 # 1、类加载器子系统 下图为类加载子系统&#xff1a; 类加载子系统负责从文件系统或者网络中加载class文件&#xff0c;class文件在文件开头有特定的文件标识&#xff08;CA FE BA BE&#xff09;。Classloader只负责cl…

java的类加载器以及如何自定义类加载器

ClassLoader作用 类加载流程的"加载"阶段是由类加载器完成的。 类加载器结构 结构&#xff1a;BootstrapClassLoader&#xff08;祖父&#xff09;–>ExtClassLoader&#xff08;爷爷&#xff09;–>AppClassLoader(也称为SystemClassLoader)&#xff08;爸…

类加载器(ClassLoader)

一、类加载器&#xff08;ClassLoader&#xff09; 1.1 什么是类加载器 Java的类加载器是Java虚拟机&#xff08;JVM&#xff09;的重要组成部分&#xff0c;它的主要作用是动态地将Java类加载到JVM中&#xff0c;以便在运行时使用这些类。Java类加载器通常是由JVM的实现者提供…