Android 程序员的JVM 认识论(一) ---------gc 记叙文(人物和地点)

前言

其实我觉得JVM GC其实是一个简单的记叙文,很容易理解。记叙文有六大要素,JVM GC也有时间地点人物。。。有没有。。。。。开始写JVM记叙文了。
时间:JVM Gc 触发的时间。
地点:JVM Gc 区域。
人物:那些对象可以回收
事件:如何GC
开始瞎说了,各位看管尽管骂人,就是不要砍我。
当当~~~~好柔顺。。。。。。。
先让我们的主人公登场 ——GC.Gabage Collection,首先一个问题,为什么有GC。。。。。。。。。。。其实在我看来GC 的必要性是在于计算机这个胖子不能只进不出,那样会被憋死。一句话总结,计算机空间有限。
先来说一下JVM 区域的划分
这里写图片描述
首先,让我们扯远一点,为什么会这样划分,其实根本一点在于模拟冯氏计算机的运行原理。稍后会专门撤一篇计算机操作系统的文章。
首先引入一个问题,什么样的对象是可以回收滴。肯定是没有引用的对象是可以回收滴。但是在不同区域没有引用的体现是不一样滴。
对于出生在堆中对象就比较容易回收,但是方法区中的对象回收相对苛刻。

如何判定一个对象可以没有引用(回收Java堆)
1. 最朴素的想法,算一下这个对象到底有多少个引用(引用计数)
2. 高深一点,看一下这对象是不是不能回收。有点类似于公理的推导,首先找到一个一定不能回收滴,从这个中心发散。(引用可达性)

说一下 优缺点,对于环形引用来说引用计数不能胜任。

引用可达性判定(仅针对HEAP中对象)
  1. 首先正在运行的对象肯定不能回收,所以栈帧肯定不回收,所以,被栈帧引用的对象是不能回收滴。
  2. 其次正在运行的本地方法区所引用的对象不能回收
  3. 常量引用的对象不能回收。
  4. 常量池中有常量还有类,所以类的静态属性引用的对象不能回收。

常量池回收

常量池包括常量以及类
1. 常量池常量的回收和heap 的回收策略很像
2.常量池类回收:
2.1首先需要没有实例
2.2该类的classloader 已经回收
2.3 类的java.lang.class已经回收,保证不能反射到。

尾记

最近读书有感,想和大家分享一下,一家之言,为博大家一笑。后续会补全时间这一章,时间这一章应该会比较难。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值