个人学习帖
第一篇 GC如何判断如何回收垃圾
mGet(GC);
- GC ,即Garbage Collection,中文名为“垃圾回收”。
- 这里的垃圾指的是程序不用的内存空间。
- GC的关键就在如何判断什么东西是垃圾。
mGet(引用计数算法)
- 找到一个对象,给其添加一个引用计数器,每当有一个地方有引用其时,计数器加1,引用失效时,计数器就减1。执行垃圾回收时,判断其引用计数是否为0。引用计数为0表示可回收。
- 该算法比较简单
- 有缺点,可能效果不明显(只有一个引用或少量引用且引用不重要)
- 缺点2,对象和对象的引用都是垃圾时(循环引用对象,可能有多个),导致无法回收。
总结:从被使用的对象出发的引用计数算法在进行垃圾回收时不是很可靠
mGet(可达性分析算法)
- 通过一系列的“GC Root”的对象作为起始点,从这些节点开始向下搜索,所走过的路径成为引用链,当一个对象到GC Root没有任何引用链相连时,则证明次对象不可用。
- 从家庭成员出发,一个个询问是否有用,去判断物品的有用程度,一个物品没有任何家庭成员宣布要使用,就像一个对象达到所有的“GC Root”都没有引用链是一样的。
- java中可以作为GC Root的对象包括以下几种:
- 虚拟机栈中引用的对象
- 方法区中静态类引用的对象。
- 方法去中常量引用的对象
- 本地方法栈中JIN引用的对象
总结:从家庭成员出发的可达性分析算法在进行垃圾回收时比较可靠