java虚拟机不同收集器对比

 

收集器名称 作用区域 采用算法 单/多线程 优点 缺点 备注
Serial收集器 新生代 复制算法

单线程 简单高效,对于限定的单个cpu环境来说,没有线程交互的开销 垃圾收集时必须暂停所有其他工作线程,直到它收集结束,对于很多应用难以接受 是虚拟机运行在client模式下默认的新生代收集器
ParNew收集器 新生代 复制算法 多线程 除了Serial收集器外,只有它可以和CMS收集器配合工作   是运行在server模式下虚拟机中首选的新生代收集器
Parallel Scavenge收集器 新生代 复制算法 并行多线程 可控吞吐量,可设置最大垃圾收集停顿时间和吞吐量大小,可设置GC自适应调节策略   主要适合在后台运算而不需要太多交互的任务
Serial Old收集器 Serial收集器的老年代版本 标记-整理算法 单线程     主要意义是给Client模式下的虚拟机使用
Parallel Old收集器 Parallel Scavenge老年代版本 标记-整理算法 多线程     注重吞吐量和cpu资源敏感的场合 可以优先考虑Parallel Scavenge+Parallel Old收集器
CMS收集器 老年代 标记-清除算法 多线程 并发收集,低停顿

1.对于cpu资源敏感;cms默认开启的回收线程是:(cpu数量+3)/4,当cpu数量少于4个时,需要用一半左右的cpu资源回收垃圾,造成用户程序线程执行缓慢。

2.产生浮动垃圾,垃圾收集阶段用户线程在执行并产生浮动垃圾,需要预留内存空间给用户线程,如果空间不够会发生concurrent mode failure,启用备用方案serial old进行垃圾收集,停顿时间会增长

3.大量空间碎片产生,内存不连续无法分配大对象容易提前触发full gc

 
G1收集器 整个java堆

标记-整理算法                                                                          

                                                       
posted @ 2019-07-22 16:50  温榆河畔的男人  阅读(197)  评论(0编辑  收藏  举报