java jvm gc 垃圾回收机制 总结

垃圾回收方法(算法,垃圾收集器)

前提

  • jdk1.8以上(已经无永久代(Permanent Generation (PermGen),变成元空间(Metaspace))

算法

  1. 基础算法
    复制算法(新生代使用)
    标记-清除算法(一般老生代使用)
    标记-整理算法(一般老生代使用)
  2. 分代收集算法(Generational Collection),就是平时我们总说的gc
    新生代一般使用复制算法,老生代一般使用标记-整理算法,元空间(过阀值就收集)

分代收集算法(Generational Collection)垃圾收集器怎么区分

  • 是单线程还是多线程?
  • 阶段不同?
  • 是否Stop The Word ?(业务线程是否停止)

垃圾收集器几个问题

  • 是新生代,老生代还是新生代和老生代可以使用?

垃圾收集器类别

收集器 新/老生代 阶段说明 单/多线程进行收集 是否Stop The Word 备注
Serial
ParNew Serial多线程版本
Parallel Scavenge 吞吐量高(其他都是Stop The Word时间短),用于后台运算而不需要太多交互的任务
Serial Old Serial老年代版本
Par Old Parallel Scavenge老年代版本
CMS(Concurrent Mark Sweep) 1.初始标记2.并发标记3.重新标记4.并发清除 1,3阶段 1.并发指的是与业务线程。2.有缺点。3.适合B/S。4.其为标记-清除(其他为标记整理),所以会产生碎片。
G1(Garbage First) 1.设置垃圾收集不超过多少毫秒2.划分区域

备注:一般ParNew和CMS配合使用

垃圾回收器总结

-因为使用的是分代收集算法(Generational Collection),所以 一般情况下,所有收集器新生代都使用复制算法,老生代都使用标记-整理算法

你可能感兴趣的:(gc,java,jvm,gc,垃圾回收机制)