• ZGC介绍


    zgc是一款可拓展的低时延,为实现以下几个目标而诞生的垃圾回收器:

    • 停顿时间不超过10ms
    • 停顿时间不会因堆变大而变长
    • 堆大小范围可支持几G到几T

    再看一下zgc的标签:

    • region-based (和G1一样)
    • NUMA-aware
    • Concurrent
    • Compacting
    • Using load barriers(让一个CPU处理单元中的内存状态对其它处理单元可见的一项技术,java的volatile底层使用的就是load barrier)
    • Using colored pointers()

    zgc介绍-by hotspot garbage collector team:https://archive.fosdem.org/2018/schedule/event/zgc/attachments/slides/2211/export/events/attachments/zgc/slides/2211/ZGC_FOSDEM_2018.pdf

    一、zgc在jdk各个版本的changelog:

    JDK 13 (Released September 2019)

    • Increased max heap size from 4TB to 16TB
    • Support for uncommitting unused memory (JEP 351)
    • Support for -XX:SoftMaxHeapSIze
    • Support for the Linux/AArch64 platform
    • Reduced Time-To-Safepoint

    JDK 12 (Released March 2019)

    • Support for concurrent class unloading
    • Further pause time reductions

    JDK 11 (Released September 2018)

    • Initial version of ZGC
    • Does not support class unloading (using -XX:+ClassUnloading has no effect)

    二、ZGC相关VM Options

    General GC OptionsZGC OptionsZGC Dianostic Options (-XX:+UnlockDianosticVMOptions)

    -XX:MinHeapSize, -Xms

    -XX:InitialHeapSize, -Xms

    -XX:MaxHeapSize, -Xmx

    -XX:SoftMaxHeapSize

    -XX:SoftRefLRUPolicyMSPerMB

    -XX:ZAllocationSpikeTolerance

    -XX:ZCollectionInterval

    -XX:ZFragmentationLimit

    -XX:ZMarkStackSpaceLimit

    -XX:ZPath

    -XX:ZUncommit

    -XX:ZUncommitDelay

    -XX:ZProactive

    -XX:ZStatisticsForceTrace

    -XX:ZStatisticsInterval

    -XX:ZVerifyForwarding

    -XX:ZVerifyMarking

    -XX:ZVerifyObjects

    -XX:ZVerifyRoots

    -XX:ZVerifyViews

     

    1、激活ZGC

    -XX:+UnlockExperimentalVMOptions -XX:+UseZGC

    2、设置堆大小,堆

    -Xmx<size>

    3、并发线程数,并发线程数太多会导致占用太多cpu时间分片,太少会导致回收速度跟不上垃圾生产速度。如果系统追求的是低时延,尽量不要让系统超负荷工作,cpu使用率尽量控制在70%以下

    -XX:ConcGCThreads=<number>

    4、return unused memery to os

    这里指的是设置了xms和xmx且xmx>xms的情况,zgc默认会返回未使用的内存给操作系统,对于内存水位是重要指标的系统,返回未使用内存可以更好的观察内存使用情况。但如果要禁用这个功能,可以使用:-XX:-ZUncommit  。但无论使用哪种策略,jvm不会uncommit unsed memery导致堆大小小于xms。这也意味着如果配置xms=xmx,该特性会被隐式禁用

    5、Enable Large Pages

    启用方式:-XX:+UseLargePages  

    Large Pages在Linux称为Huge Pages,配置zgc使用Huge Pages可以获得更好的性能(吞吐量、延迟、启动时间),并且基本没有缺点,除了配置稍微复杂一点。配置Huge Pages大小,需要注意JVM除了堆以外其他需要使用到的内存也得算进去,具体配置方法如下,就不翻译了:

    6、 Enable Transparent Huge Page(THP)

    一般不建议在对延时敏感的系统下使用,THP一个使管理Huge Pages自动化的抽象层。

    7、Enable NUMA Support

    zgc默认开启NUMA支持,意味着在分配堆内存时,会尽量使用NUMA-local的内存(比跨die访问快3倍)。但当jvm发现程序使用的只是cpu的一个子集(限定使用),则会自动禁用该特性。一般不需要关注这个特性,如果需要指定,可以通过以下参数指定

     -XX:+/-UseNUMA

    8、Enable GC logging

  • 相关阅读:
    pandas的简单使用
    java搭建web从0-1(第一步:创建web工程)
    android通过命令行安装sdk
    iOS8不能通过itms-services协议下载安装app
    date命令转换日期命令提示date: illegal time format
    mac通过命令行获取证书和配置文件过期时间
    jenkin 不必要的Execute shell执行失败,导致jenkins都失败的解决
    命令行执行jenkins,构建job(可传递参数)
    Eclipse启动分析。。
    java非web应用修改 properties/xml配置文件后,无需重启应用即可生效---自动加载
  • 原文地址:https://www.cnblogs.com/JunFengChan/p/11687791.html
Copyright © 2020-2023  润新知