垃圾回收

一、判断对象是否可被回收

1.1 引用计数法

缺点:无法解决对象之间循环依赖的问题

1.2 可达性分析算法

当一个对象GC Roots 没有任何引用链相连,说明此对象不可达。
GC Roots 对象包括以下几种:

  • 栈帧中的局部变量表引用的对象
  • 方法区中类静态属性引用的对象
  • 方法区中常量引用的对象
  • Native方法引用的对象

二、垃圾回收算法

  • 标记-清除算法
    缺点:效率低,且会产生碎片
  • 复制算法
    Eden:Survivor = 8:1
    如果另一块survivor空间不足以存放上一次新生代存活的对象,这些对象将通过【分配担保】进入老年代。
    -标记-整理算法
    -分代收集算法(主流
    新生代 -> 复制算法(对象存活率低)
    老年代 -> 标记-整理算法(对象存活率高)

三、内存分配与回收策略

Min GC: 发生在新生代的垃圾回收
Major GC/ Full GC: 发生在老年代的垃圾回收,出现Full GC,至少伴随一次 Min GC

  • 对象优先在** Eden区**分配,如果空间不够,触发一次Min GC
  • 大对象直接进入老年代(虚拟机参数控制)
  • 长期存活的对象进入老年代
  • 动态对象年龄判断
  • 空间分配担保

你可能感兴趣的:(垃圾回收)