zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    解决xcode5升级后,Undefined symbols for architecture arm64:问题
    第8章 Foundation Kit介绍
    app 之间发送文件 ios
    iphone怎么检测屏幕是否被点亮 (用UIApplication的Delegate)
    CRM下载对象一直处于Wait状态的原因
    错误消息Customer classification does not exist when downloading
    How to resolve error message Distribution channel is not allowed for sales
    ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX这些东东是什么鬼
    有了Debug权限就能干坏事?小心了,你的一举一动尽在系统监控中
    SAP GUI和Windows注册表
  • 原文地址:https://www.cnblogs.com/JunFengChan/p/11687791.html
Copyright © 2011-2022 走看看