类加载与类加载器概述

article/2025/9/18 7:13:27

目录

一、类加载

类的加载:

类的连接:

类的初始化:

类初始化步骤:

类的初始化时机:

二、类加载器

类加载器的作用

JVM的类加载机制

Java运行时具有以下内置类加载器:


一、类加载

当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过类的加载,类的连接,类的初始化这三个步骤对类进行初始化。如果不出现意外情况,JVM将会连续完成这三个步骤,所以有时也把三个步骤统称为类加载或者类初始化。

类的加载:

1、就是将class文件读入内存,并为之创建一个java.class对象

2、任何类被使用时,系统都会为之建立一个java.lang.Class对象

类的连接:

1、验证阶段:用于检测被加载的类是否有正确的内部结构,并和其他类协调一致

2、准备阶段:负责为类的类变量分配内存,并设置默认初始化

3、解析阶段:将类的二进制数据中的符合引用替换为直接引用

类的初始化:

在该阶段,主要是对类变量进行初始化

类初始化步骤:

1、假如类还未被加载和连接,则程序先加载并连接该类

2、假如该类的直接父类还未被初始化,则先初始化其直接父类

3、假如类中有初始化语句,则系统依次执行这些初始化语句

注意:在执行第2个步骤的时候,系统对直接父类的初始化步骤也遵循初始化步骤1-3

类的初始化时机:

1、创建类的实例

2、调用类的类方法

3、访问类或者接口的类变量,或者为该类变量赋值

4、使用反射方式来强制创建某个类或接口对应的java.lang.Class对象

5、初始化某个类的子类

6、直接使用java.exe命令来运行某个主类

二、类加载器

类加载器的作用

负责将.class文件加载到内存中,并为之生成对应的java.lang.Class对象,虽然我们不用过分关心类加载机制,但是了解这个机制我们就能更好的理解程序的运行

JVM的类加载机制

全盘负责:就是当一个类加载器负责加载某个Class时,该Class所依赖的和引用的其他Class也将由该类加载器负责载入,除非显示使用另一个类加载器来载入

父类委托:就是当一个类加载器负责加载某个Class时,先让父类加载器试图加载该Class,只有在父类加载器无法加载该类时才尝试从自己的类路径中加载该类

缓存机制:保证所有加载过的Class都会被缓存,当程序需要使用某个Class对象时,类加载器先从缓存区域中搜索该Class,只有当缓存区中不存在Class对象时,系统才会读取该类对应的二进制数据,并将其转换为Class对象,存储到缓存区

ClassLoader:是负责加载类的对象

Java运行时具有以下内置类加载器:

1、Bootstrap class loader(内置类加载器):它是虚拟机的内置类装入器,通常表示为null,并且没有父级

2、Platform class loader(平台类加载器):平台类加载器负责加载平台类.Platform类包括javase平台api、它们的实现类和由平台类加载器或其祖先定义的特定于JDK的运行时类。平台类加载器可以用作ClassLoader实例

3、System class loader(系统类加载器):它也被称为应用程序类加载器与平台类装入器不同。系统类装入器通常用于在应用程序类路径、模块路径和特定于JDK的工具上定义类。平台类加载器是系统类加载器的父类或祖先,因此系统类加载器可以通过委托给其父类来加载平台类。

类加载器的继承关系:System的父类加载器是Platform,而Platform的父类加载器为Bootstrap

ClassLoader中的两个方法

        static ClassLoader getSystemClassLoader(),返回用于委派的系统类加载器

        ClassLoader getParent():返回父类加载器进行委派

public class ClassLoaderDemo {public static void main(String[] args) {//static ClassLoader getSystemClassLoader(),返回用于委派的系统类加载器ClassLoader c = ClassLoader.getSystemClassLoader();System.out.println(c);//AppClassLoader//ClassLoader getParent():返回父类加载器进行委派ClassLoader c2 = c.getParent();System.out.println(c2);//PlatformClassLoaderClassLoader c3 = c2.getParent();System.out.println(c3);//null}
}

运行结果:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aSP5b-XMTIx,size_18,color_FFFFFF,t_70,g_se,x_16

 


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

相关文章

十一、类加载器的作用

狂神说Java:https://www.bilibili.com/video/BV1p4411P7V3 1、类加载的作用 将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象,作为方法区中类数据…

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;爸…