常见的垃圾回收器(上)

文章目录

      • [Serial垃圾回收器 + SerialOld垃圾回收器](#Serial垃圾回收器 + SerialOld垃圾回收器)
      • [PS + PO](#PS + PO)
      • ParNew
      • CMS

常见的垃圾回收器(下)

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

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

回收年代和算法

年轻代:复制算法

老年代:标记-整理算法
优点

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

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

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

PS + PO

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

回收年代和算法

年轻代:复制算法

老年代:标记-整理算法
优点:

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

不能保证单次的停顿时间
适用场景:

后台任务,不需要与用户交互,并且容易产生大量的对象

比如:大数据的处理,大文件导出

ParNew

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

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

回收年代和算法

年轻代

复制算法
优点 q

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

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

CMS

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、并发阶段会影响用户线程执行的性能

相关推荐
Gofarlic_oms12 小时前
利用API实现ANSYS许可证管理自动化集成
运维·服务器·开发语言·matlab·自动化·负载均衡
AI+程序员在路上3 小时前
VS Code 完全使用指南:下载、安装、核心功能与 内置AI 编程助手实战
开发语言·人工智能·windows·开源
invicinble3 小时前
这里对java的知识体系做一个全域的介绍
java·开发语言·python
catchadmin3 小时前
使用 PHP TrueAsync 改造 Laravel 协程异步化的可行路径
开发语言·php·laravel
wbs_scy3 小时前
【Linux 线程进阶】进程 vs 线程资源划分 + 线程控制全详解
java·开发语言
ss2733 小时前
食谱推荐系统功能测试如何写?
java·数据库·spring boot·功能测试
AI人工智能+电脑小能手4 小时前
【大白话说Java面试题】【Java基础篇】第15题:JDK1.7中HashMap扩容为什么会发生死循环?如何解决
java·开发语言·数据结构·后端·面试·哈希算法
m0_674294644 小时前
如何编写SQL存储过程性能对比_记录执行时间评估优化效果
jvm·数据库·python
try2find4 小时前
打印ascii码报错问题
java·linux·前端
014-code4 小时前
CompletableFuture 实战模板(超时、组合、异常链处理)
java·数据库