JVM 核心笔记:对象创建、生命周期与类加载器详解

目录

创建对象的过程

对象的生命周期

类加载器有哪些?

双亲委派模型

创建对象的过程

**1.类加载检查:**在一个对象被创建时,jvm会检查这个对象的类是否被加载加载过,如果没有被加载过则需要加载一次类之后,才能进行后面的步骤

2.分配内存: 进行类加载检查通过过后,jvm会为新对象分配一个从类加载过程中知道的合适的内存,把一块相应的内存从java堆里分出来

3.初始化零值: 在分配内存后,jvm会给内存空间初始化零值(不包括对象头),保证了对象的实例字段一开始不用赋值也能使用

**4.必要设置:**初始化过后虚拟机JVM会对对象进行必要设置,比如设置对象头,锁一类的属性

**5.执行init构造函数:**经过init构造函数后才能把对象从初始化的零值改成我们想要的内容

对象的生命周期

创建:在new之后,JVM为对象分配内存,初始化,设置对象头等操作,完成实例化

调用:对象被引用访问其属性,方法

销毁:当对象不再被引用,垃圾回收机制会自动回收对象所占空间,释放空间销毁对象

类加载器有哪些?

类加载器:把xxx.class加载进入JVM使其成为能被JVM识别的 java.lang.Class 对象

启动类加载器 (Bootstrap Class Loader):最顶层的加载器,负责加载Java的底层类如JVM中的java.util.*,由于Java层没有直接的ClassLoader 对象(通过 getClassLoader() 获取时返回 null)。

扩展类加载器/平台类加载器

扩展类加载器(Java8及以前) Extension Class Loader: 负责加载 jre/lib/ext 或由 java.ext.dirs 系统属性指定目录下的 jar 包和类库。

替换为平台类加载器(Java9及以后) Platform Class Loader: jre/lib/ext 目录和 java.ext.dirs 属性都已被移除。平台类加载器负责加载 JDK 中一些除核心模块外的平台类(如 java.sqljava.xml 等)。

在 Java 层面,它的 parent 字段实际为 null,但在委派逻辑上仍会先交给 Bootstrap ClassLoader 处理。

**应用程序类加载器(Application ClassLoader):**负责加载代码的类,可以通过ClassLoader.getSystemClassLoader()获取,其父加载器是Platform Class Loader (Java8后),之前是Extention Class Loader

自定义类加载器(Custom Class Loader):开发者可以根据需求定制类的加载方式,比如从网络加载 class 文件、数据库、甚至是加密的文件中加载类等。自定义类加载器可以用来扩展 Java 应用程序的灵活性和安全性,是 Java 动态性的一个重要体现。

双亲委派模型

有了上述这些加载器关系,就形成了双亲委派模型,核心思想就是当加载器收到一个类加载请求时,不会自己先去加载,而是先给父类加载器完成,只有当父类加载器完成不了时才会给本身加载每一层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中。

相关推荐
.千余5 分钟前
【C++】C++手写Vector容器:从底层源码模拟实现
开发语言·c++·经验分享·笔记·学习
我登哥MVP7 分钟前
Spring Boot 从“会用”到“精通”:参数解析原理
java·spring boot·后端·spring·servlet·maven·intellij-idea
Wenzar_10 分钟前
VITS+Whisper微调:低延迟TTS实战
java·人工智能·whisper
创可贴治愈心灵20 分钟前
AI浪潮下C#就业前景剖析:深耕C#为主,按需选修Java与Python
java·人工智能·c#
元直数字电路验证27 分钟前
云计算实验笔记(四):容器编排(Container Orchestration)
运维·笔记·docker·云计算
huohaiyu35 分钟前
深入解析Java垃圾回收机制
java·开发语言·算法·gc
SunnyDays10111 小时前
如何在 Java 中实现 OFD 与 PDF 格式互转
java·开发语言
自小吃多1 小时前
某志步进电机驱动器故障排查标准流程
笔记
zhangrelay2 小时前
后智能时代智能体推演预测娱乐文-节选-
笔记·学习·娱乐
小江的记录本2 小时前
【Spring全家桶】Spring Cloud 2023.0.x:微服务核心理论、CAP/BASE定理(附《思维导图》+《面试高频考点清单》)
java·spring boot·后端·spring·spring cloud·微服务·面试