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

  • 相关阅读:
    celery定时器
    基于Django的Rest Framework框架的视图组件
    Django的缓存机制
    Django中的跨域请求问题
    基于Django的Rest Framework框架的url控制器
    基于Django的Rest Framework框架的响应器
    基于Django的Rest Framework框架的分页组件
    基于Django的Rest Framework框架的解析器
    虚拟机下CentOS7开启SSH连接
    Vue中computed和watch的区别
  • 原文地址:https://www.cnblogs.com/JunFengChan/p/11687791.html
Copyright © 2011-2022 走看看