java HotSpot虚拟机垃圾回收优化(五、Available Collectors)

java HotSpot虚拟机包括三种不同类型的垃圾收集器,每一种都有不同的性能特点:
(1)serial collector (串行垃圾收集器)
串行垃圾收集器使用单线程完成垃圾回收工作。这使得它相当高效,因为没有线程间通信的开销。它最适合用于单处理器
机器,因为在多处理器硬件的机器上,它并没有优势,尽管对于多处理器机器上的小数据集(大约100M)应用它可能是有
用的。在某些硬件和操作系统配置上,串行垃圾收集器会被默认选择,也可以通过命令行选项-XX:+UseSerialGC显式的启
用。

(2)parallel collector (并行垃圾收集器,也被称为 throughput collector)
此垃圾收集器以并行方式执行minor collections,它可显著减少垃圾回收开销。它被设计用于运行在多处理器或者多线
程环境中和中等数据量到大数据量应用。在某些硬件和操作系统配置上,串行垃圾收集器会被默认选择,也可以通过命令
行选项-XX:+UseParallelGC显式的启用。

注:并行压缩是并行垃圾收集器的一个特性,使可以以并行的方式执行major collections。如果没有并行压缩,major 
collections只能以严重限制扩展性的单线程方式执行。如果指定命令行选项-XX:+UseParallelGC,JVM就会默认选择
Parallel compaction,取消则可指定选项-XX:-UseParallelOldGC.

(3)Concurrent Mark Sweep (CMS) Collector:此垃圾回收器适用于那些需要垃圾回收较短暂停,并且能与垃圾回收共享处
理器资源的应用。可以使用命令行选项-XX:+UseConcMarkSweepGC启用。

(4)Garbage-First Garbage Collector:此垃圾收集器适用于大内存多处理器的机器。它能在实现高吞吐量的同时具有更高
可能实现较短停暂目标。可以使用命令行选项-XX:+UseG1GC启用。

垃圾收集器的选择:

除非你的应用程序对暂停时间有着非常严格的需求,最好让JVM自己选择垃圾收集器。如果有必要可以通过调整堆空间的大小
来提高应用性能,如果仍不能达到需求,可采用以下方案:

(1)如果较小的数据量,上限大约100M,可以使用串行垃圾收集器,通过命令行参数-XX:+UseSerialGC.

(2)如果是单处理器机器,并且没有暂停时间方面的要求,可以让JVM自己选择,也可以使用串行垃圾收集器,通过命令行参
数-XX:+UseSerialGC.

(3)如果第一应用性能峰值是第一要求,第二没有暂停时间方面的要求或者允许一秒或者以上的停顿的应用可以让JVM自己选
择垃圾收集器,或者使用并行垃圾收集器,通过命令行参数-XX:+UseParallelGC.

(4)如果响应时间重要性高于吞吐量重要性,或者垃圾收集时间必须小于一秒的应用,可以通过参数 -XX:+UseConcMarkSwee
pGC使用CMS垃圾收集器或者通过参数-XX:+UseG1GC使用G1垃圾收集器。

此处仅是选择垃圾回收器的一个起点,因为性能与堆空间大小、应用持有存活对象的数量以及处理器的数量和处理速度息息相
关,暂停时间同样也受这些因素的影响,所以前面提到的一秒阀值仅仅只是个约数,并行垃圾收集器收集垃圾时可能很多时候
超过一秒,相似的,CMS或者G1垃圾收集器花费的时间也可能超过一秒。

如果被推荐的垃圾收集器不能满足需求,首先要通过调整堆空间大小,代空间大小来实现目标,如果还是不能满足,则可根据不同需求尝试不同的垃圾收集器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值