jvm垃圾处理器的介绍、使用场景、使用方式描述汇总

1、垃圾收集器介绍:

(1)、串行收集器(Serial收集器):

使用单个线程来执行所有垃圾收集工作,这使之相对高效,因为线程之间没有通信开销。它最适合单处理器计算机,因为它不能利用多处理器硬件,尽管它在多处理器上对于数据集较小(大约100 MB)的应用很有用。默认情况下,在某些硬件和操作系统配置上选择了串行收集器,可以使用选项启用串行收集器-XX:+UseSerialGC。

(2)、并行收集器(也称为吞吐量收集器,Parallel收集器):

并行执行次要收集,这可以大大减少垃圾收集的开销。它适用于具有在多处理器或多线程硬件上运行的中型到大型数据集的应用程序。主要区别在于使用多个线程来加速垃圾回收,次要收集和主要收集都可以并行执行,以进一步减少垃圾收集的开销。可以通过该参数启用并行收集器-XX:+UseParallelGC。

(3)、并行压缩处理器(ParallelOld收集器):

是使并行收集器能够并行执行主要收集的功能。如果没有并行压缩,则使用单个线程执行主要集合,这会大大限制可伸缩性。如果-XX:+UseParallelGC已指定选项,则默认情况下启用并行压缩。将其关闭的选项是-XX:-UseParallelOldGC。

(4)、CMS收集器:

使用一个或多个垃圾收集器线程,这些垃圾收集器线程与应用程序线程同时运行,目的是在使用期限生成完成之前完成其收集,cms收集器通过使用单独的垃圾收集器线程在执行应用程序线程的同时跟踪可访问对象,来减少由于主要收集而导致的暂停时间。添加参数-XX:+UseConcMarkSweepGC。

(5)、G1 收集器:

G1 垃圾收集器是一种服务器样式的垃圾收集器,适用于具有大内存的多处理器计算机。它尝试以高概率满足垃圾收集(GC)暂停时间目标,同时实现高吞吐量。全堆操作(例如全局标记)与应用程序线程同时执行。这样可以防止与堆或活动数据大小成比例的中断。通过XX:+UseG1GC命令启用G1收集器。

2、如何选择收集器?

如果你对你的程序有非常严格的暂停时间的要求,首先可以通过设置堆大小来提高性能,如果还不能达到你的预想,可以使用以下准则为目标:

  1. 如果应用程序的数据集较小(最大约为100 MB),则使用选项选择串行收集器-XX:+UseSerialGC。
  2. 如果应用程序将在单个处理器上运行,并且没有暂停时间要求,则让VM选择收集器,或使用选项选择串行收集器-XX:+UseSerialGC。
  3. 如果(a)峰值应用性能是第一要务,并且(b)没有暂停时间要求或可接受的暂停时间为1秒或更长时间,则让VM选择收集器,或使用选择并行收集器-XX:+UseParallelGC。
  4. 如果响应时间比整体吞吐量更重要,并且垃圾收集暂停时间必须保持小于1秒,那么请使用-XX:+UseConcMarkSweepGC或选择并发收集器-XX:+UseG1GC。

这些性能准则仅是选择收集器的起点,因为性能取决于堆的大小,应用程序维护的实时数据量以及可用处理器的数量和速度。暂停时间对这些因素特别敏感,因此前面提到的1秒阈值仅是近似值:在许多数据大小和硬件组合上,并行收集器的暂停时间将超过1秒;相反,在某些组合上,并发收集器可能无法将暂停时间保持在1秒以内。

3、垃圾收集器之间的对比及业务场景:

在具有一个处理器的主机上,由于并行执行(例如,同步)所需的开销,并行收集器的性能可能不如串行收集器。但是,当运行具有中型到大型堆的应用程序时,在具有两个处理器的计算机上,它通常比串行收集器的性能要适中,并且在可用两个以上处理器的情况下,其性能通常明显好于串行收集器。

4、推荐以下优化顺序:

  1. 最大暂停时间(垃圾收集时线程暂停的时间)

最大暂停时间目标是通过命令行选项指定的-XX:MaxGCPauseMillis=。意思是需要毫秒或更少的暂停的时间。默认情况下,没有最大暂停时间目标。如果指定了暂停时间目标,则会调整堆大小和与垃圾回收相关的其他参数,以使垃圾回收的暂停时间短于指定值。这些调整可能导致垃圾收集器降低应用程序的整体吞吐量,并且无法始终满足所需的暂停时间目标。

  1. 吞吐量

吞吐量目标是根据进行垃圾收集所花费的时间与在垃圾收集之外所花费的时间(称为应用程序时间)来衡量的。该目标由命令行选项指定,该选项-XX:GCTimeRatio=将垃圾回收时间与应用程序时间之比设置为1 / (1 + )。例如,-XX:GCTimeRatio=19将垃圾收集的目标设定为总时间的1/20或5%。默认值为99,导致垃圾回收的目标时间为1%。

5、并行收集器可能造成的堆溢出原因:

并行收集器会OutOfMemoryError在垃圾回收(GC)上花费过多时间:如果在垃圾回收中花费了总时间的98%以上,而回收不到2%的堆,则OutOfMemoryError抛出。此功能旨在防止应用程序长时间运行,而由于堆太小而几乎没有进展,甚至没有进展。如有必要,可以通过-XX:-UseGCOverheadLimit在命令行中添加选项来禁用此功能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值