(不知道把 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开发过程中,垃圾回收(Garbage Collection, GC)是管理内存资源的关键技术之一。合理的GC配置可以显著提高应用程序的性能和稳定性。本指南旨在帮助开发者深入理解...
JVM的GC调优和性能调优是提升Java应用程序性能的关键。通过对JVM参数进行合理调整以及利用各种监控和分析工具,可以有效地优化JVM的性能表现。随着Java技术的不断发展,掌握JVM调优技巧对于构建高性能Java应用程序尤...
【HotSpot GC官网文档...这个文档集合对于深入理解Java垃圾收集机制,特别是HotSpot JVM中的GC工作原理和调优实践具有很高的参考价值。通过这些截图,开发者可以获得关于如何选择、配置和优化垃圾收集器的宝贵信息。
Java 14 Hotspot 虚拟机的垃圾回收调优是提升应用程序性能的关键环节。本指南主要涵盖了垃圾收集器的优化目标、策略以及各种实现,旨在帮助开发者更好地理解如何调整 JVM 参数以满足特定的需求。 优化目标与策略...
8. **JEP 327: Enhanced G1 Ergonomics**:G1垃圾收集器的性能得到了提升,其默认设置更加智能,能够更好地适应不同的工作负载。 9. **JEP 330: Remove the Java EE and CORBA Modules**:这些模块不再包含在Java ...
Advances in Social & Occupational Ergonomics
【JAVA 5.0 虚拟机优化技术】是一个针对Java 5.0版本虚拟机(JVM)垃圾收集器调优的文档,旨在帮助开发者理解和选择最适合他们应用的垃圾收集策略,以提高应用程序的性能。以下是文档中涉及的关键知识点: 1. **...
HotSpot JVM引入了一项新技术——**工效学(ergonomics)**,能够在不同的平台上自动选择合适的内存收集器类型、堆大小及工作模式(客户端或服务器),并根据用户期望的目标自动调整垃圾收集的参数。 #### 六、内存...
首先,Java虚拟机内存管理机制的核心是垃圾收集(Garbage Collection, GC),它能够自动识别不再被引用的对象,并释放它们占用的内存空间。这一机制让开发者不需要关心内存分配和释放的细节,从而专注于业务逻辑的...
- **HotSpot“Ergonomics”**:HotSpot JVM通过“Ergonomics”机制来自动调整堆大小、代的大小、GC线程数量等参数。这些初始值通常基于服务器类型预设。 - **动态调整**:根据实际运行时统计信息,JVM能够动态调整...
##### 8. 手持工具设计 - **设计原则**:Anil Mital和Arunkumar Pennathur在此章节中介绍了设计高效且符合人体工学手持工具的基本原则。 - **材料选择**:讨论了选择合适的材料对于提高工具舒适度和耐用性的重要性。...
USCAR-25-REV3_2016 ERGONOMICS SPECIFICATION FOR ELECTRICAL CONNECTIONS.pdf
4. 舒适性(Ergonomics)——自动选择和行为调优 文档中提到了JVM如何自动选择垃圾收集器、堆大小和虚拟机配置,并提供了基于行为的并行收集器调优方法。 5. 使用建议 白皮书还提供了在不同情况下选择不同垃圾收集...
这就需要我们关注计算机使用安全,尤其是应用人体工程学(Ergonomics)原理来改善工作环境和习惯,以确保工作安全、舒适,并提高工作效率。 1. 人体工程学简介: 人体工程学是一门研究人类如何与工作环境、设备...
8. **JEP 223:增强的G1垃圾收集器(G1 Ergonomics Improvements)**:G1垃圾收集器的性能得到了提升,调整了默认设置以适应更广泛的用例。 9. **JEP 238:多版本兼容的JAR文件**:允许JAR文件包含多个版本的类,以...
4. **垃圾收集接口(G1 Ergonomics Improvements, JEP 248)**:改进了G1垃圾收集器的默认行为,优化了内存管理和性能。 5. **线程本地手柄(Thread-Local Handles, JEP 269)**:提供了一种轻量级的线程本地引用...
4. **G1垃圾收集器改进(G1 Ergonomics Improvements, JEP 318)**:G1(Garbage-First)是一款先进的垃圾收集器,JDK 10对其进行了优化,包括默认开启并行Full GC,以及改进了初始堆大小设置,以提高应用启动时间和...
### 数字人体模型在人体工程学中的应用 #### 引言 随着计算机技术的发展与进步,数字人体模型(Digital Human Models, DHM)已经成为人体工程学领域不可或缺的一部分。本文主要探讨了数字人体模型在人体工程学设计...
《基于人体工程学的中国古代与现代书写习惯研究》是一篇探讨如何运用现代技术解决古代文本处理挑战的研究论文。本文特别关注的是命名实体识别(NER),这是自然语言处理(NLP)和信息检索(IR)领域中的核心任务。...