【JVM】垃圾回收器

常用的垃圾回收器

垃圾回收器是垃圾回收算法的具体实现。 由于垃圾回收器分为年轻代和老年代,除了G1之外其他垃圾回收器必须成对组合进行使用。

Serial垃圾回收器 + SerialOld垃圾回收器

Serial是是一种单线程串行回收年轻 代的垃圾回收器。

-XX:+UseSerialGC 新生代、老 年代都使用串行回收器

回收年代和算法:年轻代复制算法 老年代标记-整理算法

优点: 单CPU处理器下吞吐量非常出色

缺点:多CPU下吞吐量不如其他垃圾回收器,堆如果偏大会让用户线程处于长时间的等待

适用场景:Java编写的客户端程序或者硬件配置有限的场景

Parallel Scavenge垃圾回收器 + Parallel Old垃圾回收器

PS+PO是JDK8默认的垃圾回收器,多线程并行回收, 关注的是系统的吞吐量。具备自动调整堆内存大小的特点。

回收年代和算法: 年轻代复制算法 老年代标记-整理算法

优点:吞吐量高,而且手动可控。为了提高吞吐量,虚拟机会动态调整堆的参数

缺点:不能保证单次的停顿时间

适用场景:后台任务,不需要与用户交互,并 且容易产生大量的对象 比如:大数据的处理,大文件导出

年轻代-ParNew垃圾回收器

ParNew垃圾回收器本质上是对Serial在多 CPU下的优化,使用多线程进行垃圾回收

-XX:+UseParNewGC 新生代使用ParNew 回收器,老年代使用串行回收器

回收年代和算法: 年轻代 复制算法

优点:多CPU处理器下停顿时间较短

缺点:吞吐量和停顿时间不如G1, 所以在JDK9之后不建议使用

适用场景:JDK8及之前的版本中,与CMS 老年代垃圾回收器搭配使用

老年代-CMS(Concurrent Mark Sweep)垃圾回收器

CMS垃圾回收器关注的是系统的暂停时间, 允许用户线程和垃圾回收线程在某些步骤中 同时执行,减少了用户线程的等待时间。

参数:-XX:+UseConcMarkSweepGC

回收年代和算法: 老年代 标记清除算法

**优点 :**系统由于垃圾回收出现的停 顿时间较短,用户体验好

缺点: 1、内存碎片问题 2、退化问题 3、浮动垃圾问题

**适用场景 :**大型的互联网系统中用户请求数 据量大、频率高的场景 比如订单接口、商品接口等

CMS垃圾回收器存在的问题

1、CMS使用了标记-清除算法,在垃圾收集结束之后会出现大量的内存碎片,CMS会在Full GC时进行碎片的整理。 这样会导致用户线程暂停,可以使用-XX:CMSFullGCsBeforeCompaction=N 参数(默认0)调整N次Full GC之 后再整理。

2.、无法处理在并发清理过程中产生的"浮动垃圾",不能做到完全的垃圾回收。

3、如果老年代内存不足无法分配对象,CMS就会退化成Serial Old单线程回收老年代。

4、并发阶段会影响用户线程执行的性能

G1 -- Garbage First 垃圾回收器

参数1: -XX:+UseG1GC 打开G1的开关, JDK9之后默认不需要打开

参数2:-XX:MaxGCPauseMillis=毫秒值 最大暂停的时间

**回收年代和算法:**年轻代+老年代 复制算法

优点: 对比较大的堆如超过6G的堆回收 时,延迟可控 不会产生内存碎片 并发标记的SATB算法效率高

**缺点 :**JDK8之前还不够成熟

**适用场景:**JDK8最新版本、JDK9之后建 议默认使用

什么是Shenandoah?

Shenandoah 是由Red Hat开发的一款低延迟的垃圾收集器,Shenandoah 并发执行大部分 GC 工作,包括并 发的整理,堆大小对STW的时间基本没有影响。

什么是ZGC?

ZGC 是一种可扩展的低延迟垃圾回收器。ZGC 在垃圾回收过程中,STW的时间不会超过一毫秒,适合需要低延 迟的应用。支持几百兆到16TB 的堆大小,堆大小对STW的时间基本没有影响。

垃圾回收器的技术演进

相关推荐
无尽的大道12 小时前
Java反射原理及其性能优化
jvm·性能优化
AAA 建材批发王哥(天道酬勤)19 小时前
JVM 由多个模块组成,每个模块负责特定的功能
jvm
JavaNice哥1 天前
1初识别jvm
jvm
涛粒子1 天前
JVM垃圾回收详解
jvm
YUJIANYUE1 天前
PHP将指定文件夹下多csv文件[即多表]导入到sqlite单文件
jvm·sqlite·php
逊嘘1 天前
【Java语言】抽象类与接口
java·开发语言·jvm
鱼跃鹰飞1 天前
大厂面试真题-简单说说线程池接到新任务之后的操作流程
java·jvm·面试
王佑辉1 天前
【jvm】Major GC
jvm
阿维的博客日记1 天前
jvm学习笔记-轻量级锁内存模型
jvm·cas·轻量级锁