1. 回收作用
    垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存
    (内存泄露:指该内存空间使用完毕后未回收,在不涉及复杂数据结构的一般情况下,java的内存泄露表现为一个内存对象的生命周期超出了程序需要它的时间长度)
    如果不进行垃圾回收,内存迟早都会被消耗空

  2. 回收对象
    那些不可能再被任何途径使用的对象

  3. 垃圾回收实现原则

    • 发现无用的信息对象;
    • 回收将无用对象占用的内存空间。使该空间可被程序再次使用。
  4. 如何确定一个对象是否可以被回收

    • 引用计数法--无法处理循环引用的问题
      原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。
      垃圾回收时,只用收集计数为 0 的对象。
    • 可达性分析算法:判断对象的引用链是否可达
  5. 垃圾收集算法

    • 标记清除算法--需要暂停整个应用,同时,会产生内存碎片
      第一阶段从引用根节点开始标记所有被引用的对象
      第二阶段遍历整个堆,把未标记的对象清除
    • 复制算法--需要两倍内存空间
      此算法把内存空间划为两个相等的区域,每次只使用其中一个区域。
      垃圾回收时,遍历当前使用区域,把正在使用中的对象复制到另外一个区域中;
    • 标记整理算法
      第一阶段从根节点开始标记所有被引用对象
      第二阶段遍历整个堆,把清除未标记对象并且把存活对象 “压缩” 到堆的其中一块,按顺序排放
    • 分代收集算法
  6. 回收算法的直接应用--垃圾收集器

ref:
《深入java虚拟机》
图解Java 垃圾回收机制