JVM:垃圾收集器

1、Serial(串行)收集器:简单高效,单线程收集器,单线程的意义不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是在进行垃圾回收时,必须暂停其他所有线程,直到它收集完成

2、ParNew收集器
Serial收集器的多线程版本,除了使用多线程进行垃圾收集外,其余行为(控制参数,收集算法等)与Serial一样。新生代采用复制,老年代采用标记-整理算法(存活率高)
3、Parallel Scanvenge 收集器
其特点是它的关注点不同于其他收集器,CMS等收集器的关注点是尽可能地缩短垃圾收集时用户线程的停顿时间,而Parallel Scanvenge收集器的目标时达到一个可控制的吞吐量。吞吐量就是CPU用于运行用户代码的时间与CPU总消耗的时间的比值,吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)
4、Serial Old收集器
Serial收集器的老年版本,单线程收集器,使用标记-整理算法。一种用途是在JDK1.5以及以前的版本中与Parallel Scavenge收集器搭配使用,另一种用途是作为CMS收集器的后背方案
5、Parallel Old收集器
多线程和标记-整理算法
6、CMS收集器(Concurrent Mark Sweep)是一种以获取最短回收停顿时间为目标的收集器,它非常符合在注重用户体验的应用上使用
CMS是HotSpot虚拟机第一款真正意义上的并发收集器,第一次实现了让垃圾收集线程与用户线程(基本上)同时工作。
CMS是一种标记-清除算法实现的,主要分为四个步骤:初始标记,并发标记,重新标记,并发清除

优点:并发收集,低停顿
缺点:对CPU资源敏感
无法处理浮动垃圾
使用标记-清除算法会导致大量空间碎片产生
7、G1收集器
G1(Garbage-First)是一款面向服务器的垃圾收集器,主要特点:
并发与并行:G1能充分用CPU、多核环境下的硬件优势,使用多个CPU来缩短stop-the-world停顿时间,部分其他收集器原本需要停顿Java线程执行GC动作,G1 收集器任然可以通过并发的方式让Java程序继续执行
分代收集:虽然G1可以不需要其他收集器配合就能独立管理整个GC堆,但是还是保留了分代的概念
空间整理:与CMS不同,G1从整体上看是基于标记-整理算法实现的,从局部上看是基于复制算法实现的
可预测的停顿:这是G1相对于CMS的另一个大优势,降低停顿时间是G1和CMS共同的关注点,但G1追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在一个长度为m毫秒的时间片段内。
G1收集器步骤:
初始标记
并发标记
最终标记
筛选标记

posted @ 2020-11-02 19:10  走过路过哭过  阅读(72)  评论(0)    收藏  举报