`

【Java 8 GC 调优】Ergonomics

 
阅读更多

(不知道把 Ergonomics 翻译成什么比较合适。)
 
Ergonomics 是 “JVM” 和 “GC调优” 提高应用程序性能的过程(如,基于行为的调优)。JVM 根据所运行的平台提供了 GC、堆大小、运行时编译器 等方面的默认选择。这些选择符合不同类型应用程序的需求,可减少命令行(参数)调整。此外,基于行为的调优会动态调整堆大小,来满足应用程序的特殊行为。
 

本节介绍这些默认选择和基于行为的调优。在使用后续章节中描述的更详细的控制之前,先使用这些默认值。

 

GC、堆、运行时编译器 的默认选择

具有以下属性的机器会被定义为服务器类的机器:

  • 2个或以上物理处理器
  • 2GB 或以上物理内存

在服务器类机器上默认使用以下选择:

  • 吞吐量GC
  • 初始堆大小为 1/64 的物理内存,最大不超过 1GB
  • 最大堆大小为 1/4 的物理内存,最大不超过 1GB
  • 运行时编译器为 Server

64位操作系统中 堆大小 的 初始值 和 最大值 可参考章节《The Parallel Collector》中 “Default Heap Size”。
 

服务器类机器的定义适用于 除了运行Windows的32位平台之外的 所有平台。下表展示了不同平台中 运行时编译器 的默认选择。

平台 操作系统 默认编译器 Server类机器上默认编译器
i586 Linux Client Server
i586 Windows Client Client (注1)
SPARC(64位) Solaris Server Server(注2)
AMD(64位) Linux Server Server(注2)
AMD(64位) Windows Server Server(注2)

 

  • 注1:即使在服务器类机器上也使用 Client 运行时编译器。因为历史上,在该组合下运行客户端程序的情况更多(如,交互应用)。
  • 注2:只支持 Server 运行时编译器。

 

基于行为的调优

对于 并行收集器,Java SE 提供了两个 GC调优参数。它们基于应用程序的两个目标:最大暂停时间 和 吞吐量。可参考《The Parallel Collector》。(这两个选项在其它收集器中不可用。)需要注意的是这两个目标并不总是能达到。应用程序需要一个足够大的堆,至少能存放所有存活数据。此外,最小堆大小 可能会阻碍这些期望目标的达成。
 

最大暂停时间

暂停时间 是 GC停止应用程序 并 恢复不再使用的空间 的持续时间。“最大暂停时间目标”的目的就是为了限制这个暂停的最长持续时间。GC会维护这个暂停时间的平均值与方差。平均值是从开始运行时计算的,且会加权;最近暂停的权重更高。如果平均值加上方差 大于 最大暂停时间目标,就会被GC认为没有达到目标。
 

最大暂停时间目标可以通过命令行选项指定:

-XX:MaxGCPauseMillis=<nnn>

它会被解释为对 GC 的提示:期望暂停时间小于等于 毫秒。GC 会调整 堆大小 和 其它相关参数,以保持垃圾收集暂停时间小于秒。默认情况下,没有最大暂停时间目标。这些调整可能会导致频繁发生GC,从而降低应用程序的吞吐量。GC会试图优先满足任何暂停时间目标。其优先级高于吞吐量目标。尽管如此,某些情况下还是无法达成期望的暂停时间目标。

 

吞吐量

吞吐量是以 垃圾收集所花时间 和 其它时间(称为应用程序时间)(的比率)来衡量的。可通过命令行选项指定该目标:

-XX:GCTimeRatio=<nnn>

GC时间 与 应用程序时间 的比率为 1 / (1+) 。如,-XX:GCTimeRatio=19 表示设定的 GC时间目标为总时间的 1/20(5%)。
 

垃圾收集所花费的时间是收集新生代和老年代所耗时间之和。如果不满足吞吐量目标,GC会增加新生代和老年代的容量,以增加应用程序在垃圾收集操作之间的运行时长。

 

最小内存占用

如果吞吐量和最大暂停时间目标都达到了,那么GC会减小堆容量,直到其中一个目标不满足(总是吞吐量目标不满足)。然后解决未实现的目标。

 

调优策略

不要指定一个最大堆内存,除非你知道你需要一个比默认值更大的堆。
选择一个足以满足你的应用程序的吞吐量目标。
 

堆可能会增大或缩小,以满足指定的吞吐量目标。应用程序行为的改变可能导致堆增大或缩小。例如,当应用程序开始更快地分配内存时,为了保持相同的吞吐量,堆会增大。
 

如果堆增大到了最大值,但还未满足吞吐量目标,那说明这个最大值对此吞吐量目标来说太小。可以将最大堆大小设置为接近平台上物理内存总量,但又不会导致应用程序内存换页的某个值。然后重新运行应用程序。如果还是不能满足吞吐量目标,那说明对这个平台来说,在使用这些可用内存的情况下,这个吞吐量目标(即,应用程序时间目标)太高了。
 

如果可以满足吞吐量目标,但是部分暂停时间太长,那么可以指定一个最大暂停时间目标。指定一个最大暂停时间目标可能意味着无法满足吞吐量目标。因此需要选择一个对应用程序来说可接受的折中方案的值。
 

当GC试图满足存在竞争关系的目标时,堆的大小通常会发生波动。即使应用程序已经达到了一个稳定的状态,也会发生波动。吞吐量、最大暂停时间、最小占用内存 这几个目标之间存在竞争关系。吞吐量目标可能需要更大的堆,最大暂停时间和最小占用内存 都可能需要较小的堆。

 

分享到:
评论

相关推荐

    Java_GC垃圾回收调优指南

    ### Java GC垃圾回收调优指南 #### 概述 在Java开发过程中,垃圾回收(Garbage Collection, GC)是管理内存资源的关键技术之一。合理的GC配置可以显著提高应用程序的性能和稳定性。本指南旨在帮助开发者深入理解...

    VM调优实战指南:GC与性能优化

    JVM的GC调优和性能调优是提升Java应用程序性能的关键。通过对JVM参数进行合理调整以及利用各种监控和分析工具,可以有效地优化JVM的性能表现。随着Java技术的不断发展,掌握JVM调优技巧对于构建高性能Java应用程序尤...

    HotSpot GC官网文档截图 - 20200917

    【HotSpot GC官网文档...这个文档集合对于深入理解Java垃圾收集机制,特别是HotSpot JVM中的GC工作原理和调优实践具有很高的参考价值。通过这些截图,开发者可以获得关于如何选择、配置和优化垃圾收集器的宝贵信息。

    【译】Java 14 Hotspot 虚拟机垃圾回收调优指南(csdn)————程序.pdf

    Java 14 Hotspot 虚拟机的垃圾回收调优是提升应用程序性能的关键环节。本指南主要涵盖了垃圾收集器的优化目标、策略以及各种实现,旨在帮助开发者更好地理解如何调整 JVM 参数以满足特定的需求。 优化目标与策略...

    JAVA SE11官方原版API文档

    8. **JEP 327: Enhanced G1 Ergonomics**:G1垃圾收集器的性能得到了提升,其默认设置更加智能,能够更好地适应不同的工作负载。 9. **JEP 330: Remove the Java EE and CORBA Modules**:这些模块不再包含在Java ...

    Advances in Social & Occupational Ergonomics

    Advances in Social & Occupational Ergonomics

    JAVA 5.0 虚拟机优化技术

    【JAVA 5.0 虚拟机优化技术】是一个针对Java 5.0版本虚拟机(JVM)垃圾收集器调优的文档,旨在帮助开发者理解和选择最适合他们应用的垃圾收集策略,以提高应用程序的性能。以下是文档中涉及的关键知识点: 1. **...

    JAVA虚拟机的内存管理

    HotSpot JVM引入了一项新技术——**工效学(ergonomics)**,能够在不同的平台上自动选择合适的内存收集器类型、堆大小及工作模式(客户端或服务器),并根据用户期望的目标自动调整垃圾收集的参数。 #### 六、内存...

    java内存管理白皮书

    首先,Java虚拟机内存管理机制的核心是垃圾收集(Garbage Collection, GC),它能够自动识别不再被引用的对象,并释放它们占用的内存空间。这一机制让开发者不需要关心内存分配和释放的细节,从而专注于业务逻辑的...

    Biomechanics in Ergonomics

    ##### 8. 手持工具设计 - **设计原则**:Anil Mital和Arunkumar Pennathur在此章节中介绍了设计高效且符合人体工学手持工具的基本原则。 - **材料选择**:讨论了选择合适的材料对于提高工具舒适度和耐用性的重要性。...

    USCAR-25-REV3_2016 ERGONOMICS SPECIFICATION FOR ELECTRICAL

    USCAR-25-REV3_2016 ERGONOMICS SPECIFICATION FOR ELECTRICAL CONNECTIONS.pdf

    JVM内存管理白皮书

    4. 舒适性(Ergonomics)——自动选择和行为调优 文档中提到了JVM如何自动选择垃圾收集器、堆大小和虚拟机配置,并提供了基于行为的并行收集器调优方法。 5. 使用建议 白皮书还提供了在不同情况下选择不同垃圾收集...

    计算机使用安全--Ergonomics---白领必备

    这就需要我们关注计算机使用安全,尤其是应用人体工程学(Ergonomics)原理来改善工作环境和习惯,以确保工作安全、舒适,并提高工作效率。 1. 人体工程学简介: 人体工程学是一门研究人类如何与工作环境、设备...

    JDK1.9谷歌翻译文档

    8. **JEP 223:增强的G1垃圾收集器(G1 Ergonomics Improvements)**:G1垃圾收集器的性能得到了提升,调整了默认设置以适应更广泛的用例。 9. **JEP 238:多版本兼容的JAR文件**:允许JAR文件包含多个版本的类,以...

    openjdk-10-windows-x64-bin

    4. **垃圾收集接口(G1 Ergonomics Improvements, JEP 248)**:改进了G1垃圾收集器的默认行为,优化了内存管理和性能。 5. **线程本地手柄(Thread-Local Handles, JEP 269)**:提供了一种轻量级的线程本地引用...

    jdk-10.0.2-win10.zip 下载

    4. **G1垃圾收集器改进(G1 Ergonomics Improvements, JEP 318)**:G1(Garbage-First)是一款先进的垃圾收集器,JDK 10对其进行了优化,包括默认开启并行Full GC,以及改进了初始堆大小设置,以提高应用启动时间和...

    Digital Human Models for Ergonomics 人体工程学数字人体模型.pdf

    ### 数字人体模型在人体工程学中的应用 #### 引言 随着计算机技术的发展与进步,数字人体模型(Digital Human Models, DHM)已经成为人体工程学领域不可或缺的一部分。本文主要探讨了数字人体模型在人体工程学设计...

    Research on Chinese Ancient and Modern Writing Habits Based on Ergonomics_withMarginNotes.pdf

    《基于人体工程学的中国古代与现代书写习惯研究》是一篇探讨如何运用现代技术解决古代文本处理挑战的研究论文。本文特别关注的是命名实体识别(NER),这是自然语言处理(NLP)和信息检索(IR)领域中的核心任务。...

Global site tag (gtag.js) - Google Analytics