您的位置:首页 > 职场人生

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

2017-08-16 15:59 288 查看

前言

其实我觉得JVM GC其实是一个简单的记叙文,很容易理解。记叙文有六大要素,JVM GC也有时间地点人物。。。有没有。。。。。开始写JVM记叙文了。

时间:JVM Gc 触发的时间。

地点:JVM Gc 区域。

人物:那些对象可以回收

事件:如何GC

开始瞎说了,各位看管尽管骂人,就是不要砍我。

当当~~~~好柔顺。。。。。。。

先让我们的主人公登场 ——GC.Gabage Collection,首先一个问题,为什么有GC。。。。。。。。。。。其实在我看来GC 的必要性是在于计算机这个胖子不能只进不出,那样会被憋死。一句话总结,计算机空间有限。

先来说一下JVM 区域的划分



首先,让我们扯远一点,为什么会这样划分,其实根本一点在于模拟冯氏计算机的运行原理。稍后会专门撤一篇计算机操作系统的文章。

首先引入一个问题,什么样的对象是可以回收滴。肯定是没有引用的对象是可以回收滴。但是在不同区域没有引用的体现是不一样滴。

对于出生在堆中对象就比较容易回收,但是方法区中的对象回收相对苛刻。

如何判定一个对象可以没有引用(回收Java堆)

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


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

引用可达性判定(仅针对HEAP中对象)

首先正在运行的对象肯定不能回收,所以栈帧肯定不回收,所以,被栈帧引用的对象是不能回收滴。

其次正在运行的本地方法区所引用的对象不能回收

常量引用的对象不能回收。

常量池中有常量还有类,所以类的静态属性引用的对象不能回收。

常量池回收

常量池包括常量以及类

1. 常量池常量的回收和heap 的回收策略很像

2.常量池类回收:

2.1首先需要没有实例

2.2该类的classloader 已经回收

2.3 类的java.lang.class已经回收,保证不能反射到。

尾记

最近读书有感,想和大家分享一下,一家之言,为博大家一笑。后续会补全时间这一章,时间这一章应该会比较难。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jvm android 程序员