文章目录
- 0 垃圾收集算法与垃圾收集器的关系
- 查看默认的jvm垃圾回收器
- jvm默认的垃圾回收器(7种)
- 部分参数说明
- JVM中的Server/Client模式
- 1 串行GC(Serial)/(Serial Copying)
- 2 并行GC(ParNew)
- 3 并行回收GC(Parallel)/(Parallel Scavenge)
- 4 并行GC(Parallel Old)/(Parallel MSC)
- 5 CMS收集器
- 6 串行GC(Serial Old)/(Serial MSC)
- 如何选择垃圾收集器
- 7 G1收集器
0 垃圾收集算法与垃圾收集器的关系
-
垃圾收集算法
是内存回收的方法
;垃圾收集器
是内存回收的具体实现
。 - 因为目前为止还没有完美的收集器出现。更加没有万能的收集器,只是针对具体应用最合适的收集器,进行分代收集。
- 四种主要的垃圾收集器。
Serial
(串行)、Parallel
(并行)、CMS
(并发标记清除)、G1
。
查看默认的jvm垃圾回收器
java -XX:+PrintCommandLineFlags -version
jvm默认的垃圾回收器(7种)
UseSerialOldGC(MSC)
(淘汰), UseSerialGC
,UseParallelGC
,UseConcMarkSweepGC
,UseParNewGC
,UseParallelOldGC
,UseG1GC
- 一般年轻代用
复制算法
,老年代用标记清除
或者标记整理算法
。
部分参数说明
- DefNew:Default New Generation
- Tenured:Old
- ParNew:Parallel New Generation
- PSYoungGen:Parallel Scavenge
- ParOldGen:Parallel Old Generation
JVM中的Server/Client模式
1 串行GC(Serial)/(Serial Copying)
-
Serial(串行)收集器
是一个单线程
收集器。新生代采用复制算法、老年代采用标记-整理算法。 - 为单线程环境设计且只使用一个线程进行垃圾回收,会暂停所有的用户线程,不适合服务器环境。
2 并行GC(ParNew)
-
ParNew
收集器是Serial
的多线程版本。新生代采用复制算法、老年代采用标记-整理算法。
3 并行回收GC(Parallel)/(Parallel Scavenge)
- Parallel Scavenge收集器类似ParNew,也是一个
新生代
垃圾收集器,使用复制算法,也是一个并行的多线程的垃圾收集器,俗称吞吐最优先收集器。一句话:串行收集器在新生代和老年代的并行化
。 - 新生代采用复制算法、老年代采用标记-整理算法。
- 多个垃圾收集线程并行工作,此时用户线程是暂停的,适用于科学计算/大数据首台处理等弱交互场景(跟前台交互不强)。
-
Parallel Scavenge收集器
关注点是吞吐量
,即CPU中运行用户代码的时间与CPU总消耗时间的比值。
4 并行GC(Parallel Old)/(Parallel MSC)
5 CMS收集器
- 4步过程
(1)初始标记(CMS initial mark)。只是标记一下GC Roots能直接关联的对象,速度很快,仍然需要暂停所有的工作线程。
(2)并发标记(CMS concurrent mark)和用户线程一起。进行GC Roots跟踪的过程,和用户线程一起工作,不需要暂停工作线程。主要标记过程,标记全部对象。
(3)重新标记(CMS remark) 。为了修正在并发标记期间,因用户程序继续运行而导致标记产生变动的那一部分对象的标记记录,仍然需要暂停所有的工作线程。由于并发标记时,用户线程依然运行,因此在正式清理前,再做修正。
(4)并发清除(CMS concurrent sweep)和用户线程一起。清除GC Roots不可达对象,和用户线程一起工作,不需要暂停工作线程。基于标记结果,直接清理对象。由于耗时最长
的并发标记和并发清除过程中,垃圾收集线程可以和用户线程一起并发
工作,所以总体上来看CMS收集器的内存回收和用户线程是一起并发地执行。 CMS收集器
关注点是减少回收停顿时间
,更注重用户体验。采用标记-清除
算法。- CMS优点:并发收集低停顿
- CMS缺点:并发执行,对CPU资源压力大
- CMS缺点:采用的标记清除算法会导致大量碎片
6 串行GC(Serial Old)/(Serial MSC)
如何选择垃圾收集器
7 G1收集器
G1收集器
是一款面向服务端应用
的垃圾收集器。应用在多处理器和大容量内存环境中,在实现高吞吐量的同时,尽可能的满足垃圾收集暂停时间的要求。- 它还具有以下特性:
G1
收集器的设计目标是取代CMS收集器。与CMS相比,优点如下:jdk9
中将G1变成默认的垃圾收集器。
- 后台维护一个优先列表,每次根据允许的收集时间,优先选择回收价值最大的内存块。
- G1参数配置