垃圾收集器

年轻代 serial:最早出现
垃圾收集时,必须暂停其他所有工作线程,直到它收集结束。
新生代采取复制算法,暂停所有用户线程。
老年代采取标记整理算法,暂停所有用户线程。
ParNew收集器:
就是serial的多线程并行版本
新生代采取复制算法,这一步并行多线程,暂停所有用户线程
老年代采取标记-整理算法,暂停所有用户线程
除了Serial收集器外,目前只有它能与CMS收集器配合工作。
ParallelScavenge收集器
基于标记复制算法实现的收集器,能够并行收集的多线程收集器
Parallel Scavenge收集器的特点是它的关注点与其他收集器不同,CMS等收集器的关注点是尽可能
地缩短垃圾收集时用户线程的停顿时间,而Parallel Scavenge收集器的目标则是达到一个可控制的吞吐
量(Throughput)。所谓吞吐量就是处理器用于运行用户代码的时间与处理器总消耗时间的比值,
吞吐量=运行用户代码时间/(运行用户代码时间+运行垃圾收集时间)

Serial Old是serial的老年代版本
单线程收集器,采用标记-整理算法。
parallel Old是paralelScavenge的老年代版本,支持多线程并发收集,基于标记-整理算法实现。

CMS收集器:
CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。目前很
大一部分的Java应用集中在互联网网站或者基于浏览器的B/S系统的服务端上,这类应用通常都会较为
关注服务的响应速度,希望系统停顿时间尽可能短,以给用户带来良好的交互体验。CMS收集器就非
常符合这类应用的需求。
从名字(包含“Mark Sweep”)上就可以看出CMS收集器是基于标记-清除算法实现的,它的运作
过程相对于前面几种收集器来说要更复杂一些,整个过程分为四个步骤,包括:
1)初始标记(CMS initial mark)
2)并发标记(CMS concurrent mark)
3)重新标记(CMS remark)
4)并发清除(CMS concurrent sweep)
其中初始标记、重新标记这两个步骤仍然需要“Stop The World”。初始标记仅仅只是标记一下GC
Roots能直接关联到的对象,速度很快;并发标记阶段就是从GC Roots的直接关联对象开始遍历整个对
象图的过程,这个过程耗时较长但是不需要停顿用户线程,可以与垃圾收集线程一起并发运行;而重
新标记阶段则是为了修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的
标记记录(详见3.4.6节中关于增量更新的讲解),这个阶段的停顿时间通常会比初始标记阶段稍长一
些,但也远比并发标记阶段的时间短;最后是并发清除阶段,清理删除掉标记阶段判断的已经死亡的
对象,由于不需要移动存活对象,所以这个阶段也是可以与用户线程同时并发的。
由于在整个过程中耗时最长的并发标记和并发清除阶段中,垃圾收集器线程都可以与用户线程一
起工作,所以从总体上来说,CMS收集器的内存回收过程是与用户线程一起并发执行的。通过图3-11
可以比较清楚地看到CMS收集器的运作步骤中并发和需要停顿的阶段

Garbage First收集器 也就是g1收集器

你可能感兴趣的:(JVM基础学习,算法,java,爬虫)