总录
名字 | 回收算法 | 特点 | 适用场景 |
---|---|---|---|
Serial | 复制算法(新生代) | 串行,实现简单效率高,可靠性高,但是有较长的STW | 单核环境和客户端 |
Serial Old | 标记压缩算法(老年代) | 串行,实现简单效率高,可靠性高,但是有较长的STW | 单核环境和客户端,以及作为CMS的后备回收器或搭配Parallel Scavenge使用 |
ParNew | 复制算法(新生代) | 并行,可以利用服务器的多核优势,有较长的STW | 对STW不敏感的应用或搭配CMS |
Parallel Scavenger | 复制算法(新生代) | 并行,可以实现可控的吞吐量 | 追求高吞吐量的应用 |
Parallel Old | 标记压缩(老年代) | 并行 | 注重高吞吐量以及CPU资源敏感的场合,都可以优先考虑Parallel Scavenge+Parallel Old 收集器 |
CMS | 标记清除(老年代) | 基于标记-清除算法实现。并发收集、低停顿且会产生内存碎片 | 适用于注重服务的响应速度,希望系统停顿时间最短,给用户带来更好的体验等场景下。如web程序、b/s服务 |
CMS流程
- 初始标记:收集根节点信息(STW)
- 并发标记:根据根节点找到存活对象
- 重新标记:为了修正并发标记期间因用户程序继续运行而导致标记产生变动的那一部分对象的标记记录(STW)
- 并发清除:对标记的对象进行清除回收。
参考文章:https://www.jianshu.com/p/55670407fdb9
G1
G1不同于别的垃圾回收器,JVM堆不再被简单的分为新生代和老年代.
G1讲堆分为多个大小相等的Region,每个region扮演不同的角色,比如有年轻代region,老年代region,复制区region和大对象region等.
G1通过对分区域的回收达到了高并发.
网友评论