原文:https://docs.oracle.com/en/java/javase/11/vm/java-virtual-machine-technology-overview.html#GUID-982B244A-9B01-479A-8651-CB6475019281
https://docs.oracle.com/en/java/javase/11/gctuning/introduction-garbage-collection-tuning.html#GUID-326EB4CF-8C8C-4267-8355-21AB04F0D304
GC
Parallel Collector
parallel压缩是支持并行执行major的特性。没有并行压缩,major使用单线程执行,明显限制扩展。并行压缩默认开启,-XX:+UseParallelGC
。可以用-XX:-UseParallelOldGC
关闭
The Mostly Concurrent Collectors
CMS和G1是两个并发收集器
- G1:G1在特定硬件和操作系统配置上默认开启,可以用
-XX:+UseG1GC
显式开启 - CMS:
-XX:+UseConcMarkSweepGC
能接受用处理器资源换更短的时停
CMS在JDK 9被deprecated
The Z Garbage Collector
ZGC是一个可扩展低延迟回收器。执行所有昂贵工作并发,不需暂停应用线程。
ZGC为需要低时延(10ms-)或超大堆(几TB)的应用使用。-XX:+UseZGC
ZGC是一个实验性特性,从JDK11开始
Selecting a Collector
除非你的应用有严格时停需求,先用VM选收集器。
如果必要,调整堆尺寸来改善性能。如果性能还是达不到目标,用以下准则选择:
- 如果app性能峰值是第一要务/无时停要求或者1s+能接受,让VM选择或者
-XX:+UseParallelGC
- 如果响应时间比吞吐量更重要,时停必须控制小于1s,选择并发收集器
-XX:+UseG1GC
or-XX:+UseConcMarkSweepGC
. - 如果响应时间很重要/使用很大堆,选择完全并发收集器
-XX:UseZGC
如果推荐收集器无法满足目标,先调整堆和代尺寸。如果性能还是不够,尝试用不同的收集器:用并发收集器减少时停,用parallel增加整体吞吐量
JVM
1 Java Virtual Machine Technology Overview
HotSpot主要技术特性
- 自适应编译器:标准的拦截器被用来运行应用。当应用运行,代码会被分析来检测性能瓶颈或者热点。HotSpot编译性能关键部分代码来提高性能,不会编译很少使用的代码。使用自适应编译器决定如何使用inline之类的技术优化已编译代码
- 快速内存分配和GC
- 线程同步:提供线程控制能力,为使用大的共享内存的多处理器server伸缩设计
从JRE9开始仅提供server VM