【Java】JVM(三)、Java垃圾收集器

一、Minor GC、Major GC 和 Full GC

  Minor GC:清理新生代空间,当Eden空间不能分配时候引发Minor GC

  Major GC:清理老年代空间

  Full GC:清理Java堆空间

 

二、新生代垃圾收集器

  1. Serial 收集器

  

  线程:单线程收集器,

  算法:新生代标记复制,老年代标记整理

  缺点:在进行垃圾收集时候需要停止所有用户线程(STW)

  优点:没有线程交互开销

  

  2. ParNew 收集器

  

  在Serial收集器上进行改进,将GC改成了多线程,其他的包括Serial可用的所有控制参数、收集算法、STW、对象分配规则、回收策略等都与Serial完全一样。

 

  3. Parallel Scavenge 收集器

  算法:复制算法

  线程:多线程

  关注点:系统吞吐量

  系统吞吐量=运行用户代码时间(运行用户代码时间+垃圾收集时间)

三、老年代垃圾收集器

  1. Serial Old 收集器

  Serial Old 是Serial 的老年代版本

  线程:单线程

 

  2. Parallel Old 收集器

  Parallel Old 是 Parallel Scavenge 的收集器老年代版本,

 

  3. CMS(Concurrent Mark Sweep 并发标记清理)收集器

  

  线程:多线程

  算法:标记清理

  步骤

  1)初始标记:标记GC Root 能直接关联到的对象

  2)并发标记:GC Root Tracing 过程

  3)重新标记:标记并发期间Java程序产生的对象

  4)并发清除:清理垃圾

  缺点:

  1)对CPU敏感,虽然不会停止CPU,但是会占用部分CPU资源

  2)无法处理浮动垃圾(在初始标记之后,并发标记时候产生的垃圾),只能留着下次清理

  3)大量的空间碎片

 

  4. G1 收集器

  优势:

  1)并行与并发

  2)分代收集

  3)空间整合

  4)可预测停顿

 

  步骤:

  1)初始标记

  2)并发标记

  3)最终标记(修正并发标记期间用户继续运作导致标记变动的一部分记录)

  4)筛选回收

  

 

 

 

 

 

posted @ 2018-07-12 09:14  三生石1314  阅读(...)  评论(...编辑  收藏