垃圾收集器比较

转载 2018年04月16日 22:57:26

转载地址 https://blog.csdn.net/u010798968/article/details/72864860

Serial:

串行收集器,JVM client模式下的默认收集器,使用复制算法,在进行垃圾回收时会暂停其他所有的工作线程(stop the world,简称STW)直至回收结束,因此会影响用户的正常使用体验,但是因为少了多线程切换的开销,相较于其他收集器能够更加专注于垃圾回收,在单核场景下效率极高,并且在回收较小内存(几十或者一两百兆)时,停顿时间是毫秒级的。推荐使用场景:年轻代占用几十兆到一两百兆的桌面应用。

使用方式:-XX:+UseSerialGC,打开该开关后,使用Serial(年轻代)+Serial Old(老年代) 组合进行GC。


ParNew:

并行收集器,Serial的多线程版本,使用多条线程进行垃圾回收,其他特性与Serial一致。需要注意的是,ParNew在单核甚至双核环境下绝对不会有比Serial收集器更好的效果,但是随着CPU数量的增加ParNew相较于Serial的优势会越来越明显,但并不是成倍增长的,原因还是那个,多线程切换开销。

另外ParNew用于垃圾回收的线程可用参数-XX:ParallelGCThreads=n进行配置。建议n与主机逻辑cpu数一致。

使用方式:-XX:+UseParNewGC,打开该开关后,使用ParNew(年轻代)+Serial Old(老年代)组合进行GC。另外,ParNew是CMS收集器的默认年轻代收集器。





Parallel Scavenge收集器是JAVA虚拟机中垃圾收集器的一种。和ParNew收集器类似,是一个新生代收集器。使用复制算法的并行多线程收集器。

1、特点

Parallel Scavenge收集器的关注点与其他收集器不同, ParallelScavenge收集器的目标则是达到一个可控制的吞吐量(Throughput)。所谓吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值,即吞吐量运行用户代码时间 /(运行用户代码时间 + 垃圾收集时间),虚拟机总共运行了100分钟,其中垃圾收集花掉1分钟,那吞吐量就是99%

由于与吞吐量关系密切,Parallel Scavenge收集器也经常被称为“吞吐量优先”收集器。

       该垃圾收集器,是JAVA虚拟机在Server模式下的默认值,使用Server模式后,java虚拟机使用Parallel Scavenge收集器(新生代)+ Serial Old收集器(老年代)的收集器组合进行内存回收。

2、使用场景

主要适应主要适合在后台运算而不需要太多交互的任务。

比如需要与用户交互的程序,良好的响应速度能提升用户的体验;而高吞吐量则可以最高效率地利用CPU时间,尽快地完成程序的运算任务等。

3、重要参数

重要的参数有三个,其中两个参数用于精确控制吞吐量,分别是控制最大垃圾收集停顿时间的-XX:MaxGCPauseMillis参数及直接设置吞吐量大小的 -XX:GCTimeRatio参数。另外一个是UseAdaptiveSizePolicy开关参数。

MaxGCPauseMillis参数允许的值是一个大于0的毫秒数,收集器将尽力保证内存回收花费的时间不超过设定值。不过大家不要异想天开地认为如果把这个参数的值设置得稍小一点就能使得系统的垃圾收集速度变得更快,GC停顿时间缩短是以牺牲吞吐量和新生代空间来换取的:系统把新生代调小一些,收集300MB新生代肯定比收集500MB快吧,这也直接导致垃圾收集发生得更频繁一些,原来10秒收集一次、每次停顿100毫秒,现在变成5秒收集一次、每次停顿70毫秒。停顿时间的确在下降,但吞吐量也降下来了




JAVA应用性能监控与调优

-
  • 1970年01月01日 08:00

就那么几种垃圾收集器

1. Serial收集器     Serial收集器是JAVA虚拟机中最基本、历史最悠久的收集器,在JDK 1.3.1之前是JAVA虚拟机新生代收集的唯一选择。Serial收集器是一个单线程的收...
  • u013782203
  • u013782203
  • 2016-08-16 16:51:21
  • 2696

垃圾收集器的种类及原理

1、Serial收集器:古老的单线程收集器,作用于新生代。单线程的意义并非仅仅是只使用一条线程进行垃圾回收,更重要的是,在进行垃圾回收的时候,必须暂停其他所有的工作线程,因此,用户体验很不好。单实际上...
  • yanqiaoli
  • yanqiaoli
  • 2017-03-17 17:09:29
  • 802

JVM垃圾回收机制总结(5) :JDK垃圾收集器的配置命令

全文转载:http://pengjiaheng.iteye.com/blog/548472 作者:和你在一起 [from JavaEye]   以下配置主要针对分代垃圾回收算法而言。...
  • sunmenggmail
  • sunmenggmail
  • 2013-08-22 10:28:51
  • 2195

深入理解JVM之四:详解垃圾收集器

前言前面已经对垃圾收集算法有了较为详细的介绍,这里我们将对JVM中具体的垃圾回收器进行介绍,在虚拟机规范中并没有对垃圾回收器如何实现具体介绍,因此每个厂商的垃圾回收器可能会完全不同,但是我们介绍的是基...
  • u011116672
  • u011116672
  • 2016-03-27 21:39:24
  • 2921

JVM笔记3:Java垃圾收集算法与垃圾收集器

当前商业虚拟机的垃圾收集都采用“分代收集”算法,即根据对象生命周期的不同,将内存划分几块,一般为新生代和老年代,不同的代根据其特点使用不同的垃圾收集算法,主要的垃圾回收算法有:一,标记-清除算法 二,...
  • a19881029
  • a19881029
  • 2013-10-22 09:37:17
  • 3073

垃圾收集器,详解jdk参数配置

Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此,不同厂商,不同版本的虚拟机所提供的垃圾收集器都可能会有很大的差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使...
  • u012291108
  • u012291108
  • 2016-07-26 11:35:50
  • 926

jvm垃圾收集器配置-1

-XX:+UseSerialGC 开启单线程、Stop-The-World的新生代和老年代垃圾收集器。它是jvm中最古老而且最成熟的垃圾收集器,一般来说,只有在客户端java程序的时候才会使用该垃圾收...
  • f529352479
  • f529352479
  • 2016-07-10 22:22:44
  • 584

垃圾收集器参数总结

垃圾收集器参数总结 -XX:+ 启用选项 -XX:- 不启用选项 -XX:=  -XX:=   参数 描述 -XX:+UseSerialGC J...
  • huxian1234
  • huxian1234
  • 2013-12-06 10:50:43
  • 1131

Java虚拟机七种垃圾收集器比较

1、Serial收集器曾经是虚拟机新生代收集的唯一选择,是一个单线程的收集器,在进行收集垃圾时,必须stop the world,它是虚拟机运行在Client模式下的默认新生代收集器。 2、Seri...
  • lingzhm
  • lingzhm
  • 2015-07-31 20:05:46
  • 2036
收藏助手
不良信息举报
您举报文章:垃圾收集器比较
举报原因:
原因补充:

(最多只允许输入30个字)