[HotSpot 虚拟机垃圾收集调优指南-JavaSE11-笔记]-2-调优策略简介

2-调优策略简介

JVM 为垃圾收集器、堆大小和运行时编译器提供与平台相关的默认选择。这些选择符合不同类型应用程序的需求,同时需要较少的命令行调整。此外,基于行为的调整会动态优化堆的大小以满足应用程序的指定行为。

2.1 垃圾收集器、堆和运行时编译器默认选择

  • 服务器级机器上的垃圾优先 (G1) 收集器,否则为串行收集器。
  • GC 线程的最大数量受堆大小和可用 CPU 资源的限制
  • 初始堆大小为物理内存的 1/64
  • 最大堆大小为物理内存的 1/4
  • 分层编译器,同时使用 C1C2

服务器级:如果 VM 检测到两个以上的处理器并且堆大小大于或等于 1792 MB,则 VM 将计算机视为服务器级。

2.2 基于行为的调优

Java HotSpot VM 垃圾收集器可以配置为优先满足以下两个目标之一最大暂停时间应用程序吞吐量。如果满足首选目标,收集器将尝试最大化另一个目标。当然,这些目标并不总是能够实现:应用程序需要一个最小堆来保存至少所有的实时数据,而其他配置可能会阻止达到部分或全部所需的目标。

2.2.1 最大暂停时间目标

暂停时间是垃圾收集器停止应用程序并恢复不再使用的空间的持续时间。最大停顿时间目标的目的是限制这些停顿中最长的停顿

暂停的平均时间和该平均值的差异由垃圾收集器维护。平均值是从执行开始时获取的,但它是加权的,因此最近的暂停更重要。如果暂停时间的平均值加上方差大于最大暂停时间目标,则垃圾收集器认为没有达到目标

使用命令行选项指定最大暂停时间目标 -XX:MaxGCPauseMillis=. 这被解释为对垃圾收集器的提示,即暂停时间为需要毫秒或更少。垃圾收集器调整 Java 堆大小和其他与垃圾收集相关的参数,以试图使垃圾收集暂停时间短于毫秒。最大暂停时间目标的默认值因收集器而异。这些调整可能会导致垃圾收集更频繁地发生,从而降低应用程序的整体吞吐量。但是,在某些情况下,无法实现所需的暂停时间目标。

2.2.2 吞吐量目标

吞吐量目标是根据垃圾收集所花费的时间来衡量的,而在垃圾收集之外花费的时间应用程序时间

目标由命令行选项指定**-XX:GCTimeRatio=nnn**. 垃圾收集时间应用程序时间比率为 1/ (1+nnn)。例如,-XX:GCTimeRatio=19将目标设置为垃圾收集总时间的 1/20 或 5%。

垃圾收集所花费的时间是所有垃圾收集引起的暂停的总时间。如果吞吐量目标没有得到满足,那么垃圾收集器的一种可能的操作是增加堆的大小,以便在收集暂停之间花费在应用程序中的时间可以更长。

如果已达到吞吐量和最大暂停时间目标则垃圾收集器会减小堆的大小,直到无法满足其中一个目标(始终是吞吐量目标)。垃圾收集器可以使用的最小和最大堆大小可以使用 **-Xms=-Xmx=**分别为最小和最大堆大小。

2.3 调整策略

堆增长或缩小到支持所选吞吐量目标的大小。了解堆调整策略,例如选择最大堆大小和选择最大暂停时间目标。

不要为堆选择最大值,除非您知道您需要一个大于默认最大堆大小的堆。选择一个足以满足您的应用程序的吞吐量目标。

应用程序行为的变化可能会导致堆增大或缩小。例如,如果应用程序以更高的速率开始分配,则堆会增长以保持相同的吞吐量。

如果堆增长到其最大大小并且未满足吞吐量目标,则最大堆大小对于吞吐量目标来说太小了。将最大堆大小设置为接近平台上总物理内存的值,但不会导致应用程序的交换。再次执行应用程序。如果吞吐量目标仍未达到,则应用程序时间目标对于平台上的可用内存来说太高了。

如果可以满足吞吐量目标,但停顿时间过长,则选择最大停顿时间目标。选择最大暂停时间目标可能意味着无法满足您的吞吐量目标,因此请选择应用程序可接受的折衷值。

当垃圾收集器试图满足竞争目标时,堆的大小通常会发生波动。即使应用程序已达到稳定状态也是如此。实现吞吐量目标(可能需要更大的堆)的压力与最大暂停时间和最小占用空间(两者都可能需要小堆)的目标竞争

技术咨询支持,可以扫描微信公众号进行回复咨询
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宋小生的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值