《JVM系列,tomcat面试题汇总

本文详细介绍了JVM中的ParNew、CMS和G1垃圾收集器的工作原理、特点以及应用场景。ParNew是Serial收集器的多线程版本,适用于多CPU环境,而CMS关注低延迟,适合交互性强的应用。G1则是面向服务端,具有低停顿时间和空间整合的优点,适用于大内存应用。文章还探讨了各种收集器的优缺点和参数设置,以及在面试中的重要性。
摘要由CSDN通过智能技术生成

ParNew收集器可以看作时Serial收集器的多线程版本。Par是Parallel的缩写,New:只能处理的是新生代。ParNew 收集器除了采用并行回收的方式执行内存回收外,两款垃圾收集器之间几乎没有任何区别。ParNew收集器在年轻代中同样也是采用复制算法、"Stop-the-World"机制。

ParNew 是很多JVM运行在Server模式下新生代的默认垃圾收集器。

在这里插入图片描述

  • 对于新生代,回收次数频繁,使用并行方式高效。

  • 对于老年代,回收次数少,使用串行方式节省资源。(CPU并行需要切换线程,串行可以省去切换线程的资源)

由于ParNew收集器是基于并行回收,那么是否可以断定ParNew收集器的回收效率在任何场景下都会比serial收集器更高效?

ParNew收集器运行在多CPU的环境下,由于可以充分利用多CPU、多核心等物理硬件资源优势,可以更快地完成垃圾收集,提升程序的吞吐量。但是在单个CPU环境下,PerNew收集器不必Serial收集器更高效。 虽然Serial收集器时基于串行回收,但是由于CPU不需要频繁地做任务切换,因此可以有效避免多线程中产生的一些额外开销。

参数设置:

  • -XX:+UseParNewGC:指定使用ParNew收集器执行内存回收任务。它表示年轻代使用并行收集器,不影响老年代。

  • -XX:ParallelGCThreads:限制线程数量,默认开启和CPU数据相同的线程数。

[](

)Parallel回收器:吞吐量优先


Parallel Scavenge收集器中采用了复制算法、并行回收和"Stop the World"机制。 和ParNew收集器不同,ParallelScavenge收集器的目标是达到一个可控制的吞吐量(Throughput),它也被称为吞吐量优先的垃圾收集器。

自适应调节策略也是Parallel Scavenge与ParNew一个重要区别。

高吞吐量则可以高效率地利用CPU时间,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务。因此,常见在服务器环境中使用。例如,那些执行批量处理、订单处理、工资支付、科学计算的应用程序。

Parallel收集器在JDK1.6时提供了用于执行老年代垃圾收集的Parallel old收集器,用来代替老年代的Serialold收集器。

Parallel old收集器采用了标记-压缩算法,但同样也是基于并行回收和"stop-the-World"机制。

在这里插入图片描述

在程序吞吐量优先的应用场景中,IParallel收集器和Parallel old收集器的组合,在server模式下的内存回收性能很不错。在Java8中,默认是此垃圾收集器。

参数配置:

  • -XX:+UseParallelGC: 手动指定年轻代使用Parallel并行收集器执行内存回收任务,适用于新生代。

  • -XX:+UseParalleloldcc :手动指定老年代都是使用并行回收收集器,适用于老年代。两个参数,默认jdk8是开启的,开启一个,另一个也会被开启。(互相激活)

  • -XX:ParallelGcrhreads:设置年轻代并行收集器的线程数。一般地,最好与CPU数量相等,以避免过多的线程数影响垃圾收集性能。在默认情况下,当CPU数量小于8个,ParallelGcThreads的值等于CPU数量。当CPU数量大于8个,ParallelGCThreads的值等于3+[5*CPU Count]/8]

  • -XX:MaxGCPauseMillis 设置垃圾收集器最大停顿时间(即STW的时间),单位是毫秒。为了尽可能地把停顿时间控制在MaxGCPauseMills以内,收集器在工作时会调整Java堆大小或者其他一些参数。对于用户来讲,停顿时间越短体验越好。但是在服务器端,我们注重高并发,整体的吞吐量。所以服务器端适合Parallel,进行控制。该参数使用需谨慎。

    -XX:GCTimeRatio:垃圾收集时间占总时间的比例(=1/(N+1))。用于衡量吞吐量的大小。取值范围(0,100)。默认值99,也就是垃圾回收时间不超过1。与前一个-xx:MaxGCPauseMillis参数有一定矛盾性。暂停时间越长,Radio参数就容易超过设定的比例。

  • -XX:+UseAdaptivesizepplicy :设置Parallel scavenge收集器具有自适应调节策略,在这种模式下,年轻代的大小、Eden和Survivor的比例、晋升老年代的对象年龄等参数会被自动调整,已达到在堆大小、吞吐量和停顿时间之间的平衡点。在手动调优比较困难的场合,可以直接使用这种自适应的方式,仅指定虚拟机的最大堆、目标的吞吐量(GCTimeRatio)和停顿时间(MaxGCPauseMil1s),让虚拟机自己完成调优工作。

[](

)CMS回收器:低延迟


在JDK1.5时期,Hotspot推出了一款在强交互应用中几乎可认为有划时代意义的垃圾收集器:CMS(Concurrent-Mark-Sweep)收集器,这款收集器是HotSpot虚拟机中第一款真正意义上的并发收集器,它第一次实现了让垃圾收集线程与用户线程同时工作。

CMS收集器的关注点是尽可能缩短垃圾收集时用户线程的停顿时间。停顿时间越短(低延迟)就越适合与用户交互的程序,良好的响应速度能提升用户体验。

  • 目前很大一部分的Java应用集中在互联网站或者B/S系统的服务端上,这类应用尤其重视服务的响应速度,希望系统停顿时间最短,以给用户带来较好的体验。 CMS收集器就非常符合这类应用的需求。

  • CMS的垃圾收集算法采用标记-清除算法,并且也会"stop-the-world"

CMS整个过程比之前的收集器要复杂,整个过程分为4个主要阶段,即

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值