Java类型的生命周期简介

本文深入探讨Java类型从装载到卸载的生命周期过程,包括装载、连接、初始化阶段及其子步骤验证、准备、解析,以及卸载类型的原因和条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里要讲的是类型(Class)的生命周期而不是对象的生命周期,后续文章将描述GC的相关内容。

 

1. 类型的生命周期的开始

装载(Load)----->连接(Link)------>初始化(Initialize),而连接阶段分为三个子步骤----------验证(Verifiy)--->准备(Prepare)--->解析(Resolve)(可选的)。

见下图:

 2. 卸载类型

首先:为何要卸载类型?

这个问题很简单,就像你的家里为什么要打扫一样,你们懂得!

因为每次加载一个Java类型,就要再方法区中开辟一块内存出来,存储与该类型相关的信息(可以参考

http://boy00fly.iteye.com/admin/blogs/1095263),方法区中的内存的占用会越来越多,所以如果不回收这些类型的话,你们懂的!

其次:何时要卸载?

其判断标准和与判断对象是否需要被回收的标准很类似。如果程序不再引用某类型,那么这个类型就可以卸载了。启动类装载器装载的类型永远是可触及的,所以永远不会内卸载。只有使用用户定义的类装载器装载的类型才会变成不可触及的。如果某个类型的Class实例被发现无法通过正常的垃圾收集堆触及,那么这个类型就是不可触及的。

最后:如何判断动态装载的类型的Class实例在正常的垃圾收集过程中是否可以触及?

第一种:最简单的,如果程序保持对Class实例的明确引用,他就是可触及的。

第二种:如果在堆中还存在一个可触及的对象,在方法区中他的类型数据指向一个Class实例,那么这个Class实例就是可触及的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值