其他分享
首页 > 其他分享> > 面试官:说一下JVM常用垃圾回收器的特点、优劣势、使用场景和参数设置

面试官:说一下JVM常用垃圾回收器的特点、优劣势、使用场景和参数设置

作者:互联网

Java中的垃圾回收器几乎是面试中的必考点,无论是面试初级,中级还是高级,总免不了要问一问垃圾回收器的一些知识点。不管在实际开发中你使用程度怎么样,为了面试不被压价,还是非常有必要对它做一个较深入的理解。

本篇对JVM中常用的几种垃圾回收器的主要特点,使用场景及优化建议做一个简单介绍,希望起到抛砖引玉的效果,对你入门有所帮助。【参考文献】

新生代回收器

老年代回收器

新生代和老年代回收器

Serial

特点

Serial收集器是最基本、发展历史最悠久的收集器。JDK1.3.1前是HotSpot新生代收集的唯一选择。

运行示意图

有如下特点:

优势:

劣势:

使用场景

在用户的桌面应用场景中,可用内存一般不大,可以在较短时间内完成垃圾收集,只要不频繁发生,这是可以接受的

对于限定单个CPU的环境来说,Serial收集器没有线程切换开销,可以获得最高的单线程收集效率

参数设置

-XX:+UseSerialGC:添加该参数来显式的使用串行垃圾收集器

ParNew

特点

ParNew收集器其实就是Serial收集器的多线程版本,除了使用多线程进行垃圾收集之外,其余均和Serial 收集器一致。

运行示意图

优势:

劣势:

使用场景

Server模式下使用,亮点是除Serial外,目前只有它能与CMS收集器配合工作,是一个非常重要的垃圾回收器。

参数设置

parallel

特点【参考文献】

Parallel Scavenge也是一款用于新生代的多线程收集器,也是采用复制算法。与ParNew的不同之处在于Parallel Scavenge收集器的目的是达到一个可控制的吞吐量,而ParNew收集器关注点在于尽可能的缩短垃圾收集时用户线程的停顿时间。
在这里插入图片描述

有如下特点:

优势:

追求高吞吐量,高效利用CPU,是吞吐量优先,且能进行精确控制。

劣势:

应该说是特点,追求高吞吐量必然要牺牲一些其他方面的优势,不能做到既,又。ParNew收集器关注点在于尽可能的缩短垃圾收集时用户线程的停顿时间,原本10s收集一次, 每次停顿100ms, 设置完参数之后可能变成5s收集一次, 每次停顿70ms. 停顿时间变短, 但收集次数变多。

使用场景

根据相关特性,我们很容易想到它的使用场景,即:当应用程序运行在具有多个CPU上,对暂停时间没有特别高的要求时,程序主要在后台进行计算,而不需要与用户进行太多交互等就特别适合ParNew收集器。

例如,那些执行批量处理、订单处理、工资支付、科学计算的应用程序等

参数设置

Serial Old
特点
Serial Old是Serial收集器的老年代版本,同样是一个单线程收集器,使用标记-整理算法。

有如下特点:

优劣势基本和Serial无异,它是和Serial收集器配合使用的老年代收集器。

使用场景

CMS

特点

CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。采用的算法是“标记-清除”,运作过程分为四个步骤:

运行示意图

有如下特点:【参考文献】

优势

劣势

使用场景

如常见WEB、B/S系统的服务器上的应用。

参数设置

Parallel Old

特点

Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法,可以充分利用多核CPU的计算能力。

有如下特点:

优劣势参考Parallel Scavenge收集器。

使用场景

这样在注重吞吐量以及CPU资源敏感的场景,就有了Parallel Scavenge(新生代)加Parallel Old(老年代)收集器的"给力"应用组合;

参数设置【参考文献】

G1

特点

有如下特点:

并行与并发

优势:

G1收集器是当今收集器技术发展的最前沿成果。

劣势:

G1 需要记忆集 (具体来说是卡表)来记录新生代和老年代之间的引用关系,这种数据结构在 G1 中需要占用大量的内存,可能达到整个堆内存容量的 20% 甚至更多。而且 G1 中维护记忆集的成本较高,带来了更高的执行负载,影响效率。

按照《深入理解Java虚拟机》作者的说法,CMS 在小内存应用上的表现要优于 G1,而大内存应用上 G1 更有优势,大小内存的界限是6GB到8GB。

以,尽管是最前沿的成果,也不是完美无缺的。

使用场景

个人以为G1已经基本全面压制cms、parallel等回收器,缺点见上面的劣势。但如果不是追求极致的性能,基本可以无脑G1

参数设置【参考文献】

基本就介绍这些了,垃圾回收器基本不变的知识点多,学会(理解)可以应付N年的相关知识的面试,又是高频面试考点,各位同学还是值得在这块下点功夫的。文中有任何不足,错误欢迎指出,共同进步!

最后来自小编的福利

小编整理了一份大厂真题的面试资料,以及2021最新Java核心技术整理的资料集锦,需要领取的小伙伴可以 私聊关注我 免费领取 ,编程的世界永远向所有热爱编程的人开放,这是一个自由,平等,共享的世界,我始终是这样坚信的。

喜欢小编的分享可以点赞关注哦,小编持续为你分享最新文章 和 福利领取哦

标签:面试官,G1,收集,收集器,停顿,垃圾,Serial,优劣势,参数设置
来源: https://blog.csdn.net/xxsiyao/article/details/118635349