重学java 81.类的加载时机

不破不立,人类最宝贝的品质就是勇敢和过去告别

------ 24.6.21

一、类的加载时机

1.new对象

2.new子类对象(new子类对象先初始化父类)

3.执行main方法

4.调用静态成员

5.反射,创建Class对象

这五种情况就可以让类加载到内存

类加载过程

1.问题:谁将class文件加载到了内存?

jvm

2.问题:jvm利用了什么技术将class文件加载到了内存?

IO流技术

3.问题:jvm相当于一个大"boss",所以有很多事情不是jvm直接插手,比如加载class文件就不是ivm直接插手干的,那么是jvm下面的谁干的呢?

"类加载器"->ClassLoader

二、类加载器 ClassLoader

1.概述

在jvm中,负责将本地上的class文件加载到内存的对象**_ClassLoader**

2.分类

**BootstrapClassLoader:**根类加载器->C语言写的,我们是获取不到的也称之为引导类加载器,负责java的核心类加载的

比如:System,String等

jre/lib/rt.jar下的类都是核心类

② ExtClassLoader: 扩展类加载器

负责jre的扩展目录中的jar包的加载

在idk中ire的lib目录下的ext目录

③ AppClassLoader: 系统类加载器

负责在jvm启动时加载来自java命令的c1ass文件(自定义类),以及classPath环境变量所指定的jar包(第三方jar包)

不同的类加载器负责加载不同的类

3.三者的关系(从类加载机制层面):

AppclassLoader的父类加载器是ExtclassLoader

ExtClassLoader的父类加载器是BootstrapclassLoader

但是:他们从代码级别上来看,没有子父类继承关系->他们都有一个共同的父类->ClassLoader

4.获取类加载器对象:getClassLoader()是class对象中的方法

类名.class.getClassLoader()

5.获取类加载器对象对应的父类加载器

ClassLoader类中的方法:ClassLoader

getParent ---> 没啥用

6.双亲委派(全盘负责委托机制)

a.Person类中有一个string

Person本身是AppclassLoader加载

String是BootstrapClassLoader加载

b.加载顺序:

Person本身是App加载,按道理来说String也是App加载

但是App加载string的时候,先问一问Ext,说:Ext你加载这个string吗?

Ext说:我不加载,我负责加载的是扩展类,但是app你别着急,我问问我爹去->boot

Ext说:boot,你加载String吗?

boot说:正好我加载核心类,我加载

7.类加载器的cache(缓存)机制(扩展):

一个类加载到内存之后,缓存中也会保存一份儿,后面如果再使用此类,如果缓存中保存了这个类,就直接返回他,如果没有才加载这个类,下一次如果有其他类在使用的时候就不会重新加载了,直接去缓存中拿,保证了类在内存中的唯一性

向上委托,向下查找

类加载器的双亲委派和缓存机制共同造就了加载类的特点:保证了类在内存中的唯一性

相关推荐
01_ice1 分钟前
Java抽象类和接口
java·开发语言
小马爱打代码6 分钟前
Spring源码 第七篇:Spring Boot 自动配置原理深度拆解
java·spring boot·spring
日取其半万世不竭15 分钟前
给 Docker 容器设置 CPU 和内存限制,避免单个服务拖垮整机
java·docker·容器
铁皮哥19 分钟前
【agent 开发】Claude Code 的 Skill 是怎么被加载的?从 name/description 到 SKILL.md 再到资源文件
java·服务器·数据库·python·gitee·github·软件工程
小糯米60125 分钟前
C语言 自定义类型:结构体 与 联合体
c语言·开发语言·数据结构
jieyucx26 分钟前
Go 语言 JSON 序列化与反序列化
开发语言·golang·json·序列化
白宇横流学长30 分钟前
基于SpringBoot实现的校园失物招领平台设计与实现【源码+文档】
java·spring boot·后端
罗超驿34 分钟前
6.Java多线程详解:Thread类、线程属性与start()方法深度解析
java·开发语言·面试·java-ee
苦逼的猿宝40 分钟前
IT技术交流和分享平台的设计与实现(源码+论文)
java·毕业设计·springboot·计算机毕业设计
摇滚侠43 分钟前
IDEA 需要修改的配置 开发工具
java·ide·intellij-idea