Java类型的生命周期简介

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

 

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

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

见下图:

 2. 卸载类型

首先:为何要卸载类型?

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

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

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

其次:何时要卸载?

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

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值