Java垃圾回收器

翻译一篇Oracle官方的垃圾回收器文章。原文地址

回收器分类

Java HotSpot VM包含三种不同类型的垃圾回收器,各有不同的性能特征。

  1. 串行回收器

串行回收器使用单线程来完成所有垃圾回收工作,因为没有多线程间的通信开销使得串行回收器是相对高效的。串行回收器最适用于单处理器机,因为它不能从多处理器中获益。但是我们仍然可以将它应用在多处理机上,如果应用程序的数据量小(约上至100MB)。在特定的硬件以及操作系统配置中,串行回收器会被默认选择,我们也可以通过选项-XX:+UseSerialGC 来明确指定选择串行回收器。

  1. 并行回收器

并行回收器(也称之为吞吐量回收器)并行执行minor垃圾回收,这可以显著降低垃圾回收开销。并行回收器是为运行在多核或多线程硬件平台上的具有中大型数据量的应用程序而设计。在特定的硬件以及操作系统配置中,并行回收器会被默认选择,我们也可以通过选项-XX:+UseParallelGC 来明确指定选择并行回收器。
并行压缩特性使得并行回收器能够并行执行major垃圾回收。没有并行压缩的情况下,major垃圾回收是通过单线程完成的,这会显著限制scalability。-XX:-UseParallelGC 选项会默认启用并行压缩特性,关闭这一特性可使用选项-XX:-UseParallelOldGC

  1. 并发回收器

多数 并发回收器 是并发(比如说在用户应用运行时执行垃圾回收)完成垃圾回收以确保垃圾回收暂停时间短。并发回收技术能够减少回收暂停,但降低了应用程序性能,因而并发回收器适用于那些响应时间优先级高于总吞吐量的中大型数据量应用。Java HotSpot VM提供了两种并发回收器:CMS和G1,可分别通过选项-XX:+UseConcMarkSweepGC-XX:+UseG1GC 启用。

回收器选择

如果你的应用程序没有严格的暂停时间要求,就让VM自己选择垃圾回收器,必要时可调整堆内存大小来提高性能。如果性能仍不能达到要求,你可以使用以下准则作为回收器选择的入门指导。

1、如果应用程序的数据量小(上至约100MB),那么使用选项-XX:+UseSerialGC选择串行回收器。

2、如果应用程序是运行在单处理器机器上且没有暂停时间要求的,可让VM自己选择回收器或者通过使用选项-XX:+UseSerialGC选择串行回收器。

3、如果应用程序的峰值性能优先级最高且没有暂停时间要求的,或者可以暂停一秒以上的,可让VM自己选择回收器或者通过使用选项-XX:+UseParallelGC选择并行回收器。

4、如果响应时间优先级高于总吞吐量且垃圾回收暂停时间必须短于约1秒,可通过使用选项-XX:+UseConcMarkSweepGC-XX:+UseG1GC选择并发回收器。

以上准则可作为回收器选择的入门指导。但程序性能取决于堆内存大小、应用程序持有的存活的数据量以及处理器数量和速度,而暂停时间更易受这些因素的影响,因此前面提到的1秒是一个概数。

如果推荐的回收器不能达到期望的性能,首先尝试调整堆及各代的大小。若性能仍不能达到期望,可尝试选择不同的回收器:并发回收器可降低暂停时间、并行回收器可在多处理器机提高总吞吐量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值