个人学习帖

第一篇 GC如何判断如何回收垃圾

mGet(GC);

  1. GC ,即Garbage Collection,中文名为“垃圾回收”。
    • 这里的垃圾指的是程序不用的内存空间。
    • GC的关键就在如何判断什么东西是垃圾。

mGet(引用计数算法)

  1. 找到一个对象,给其添加一个引用计数器,每当有一个地方有引用其时,计数器加1,引用失效时,计数器就减1。执行垃圾回收时,判断其引用计数是否为0。引用计数为0表示可回收。
    • 该算法比较简单
    • 有缺点,可能效果不明显(只有一个引用或少量引用且引用不重要)
    • 缺点2,对象和对象的引用都是垃圾时(循环引用对象,可能有多个),导致无法回收。

总结:从被使用的对象出发的引用计数算法在进行垃圾回收时不是很可靠

mGet(可达性分析算法)

  1. 通过一系列的“GC Root”的对象作为起始点,从这些节点开始向下搜索,所走过的路径成为引用链,当一个对象到GC Root没有任何引用链相连时,则证明次对象不可用。
  2. 从家庭成员出发,一个个询问是否有用,去判断物品的有用程度,一个物品没有任何家庭成员宣布要使用,就像一个对象达到所有的“GC Root”都没有引用链是一样的。
    • java中可以作为GC Root的对象包括以下几种:
  1. 虚拟机栈中引用的对象
  2. 方法区中静态类引用的对象。
  3. 方法去中常量引用的对象
  4. 本地方法栈中JIN引用的对象

总结:从家庭成员出发的可达性分析算法在进行垃圾回收时比较可靠