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 Options ZGC Options ZGC 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

最新文章

  1. JavaScript中绑定事件监听函数的通用方法addEvent() 和 事件绑定之bindEvent()与 unBindEvent()函数
  2. 精美素材:40个漂亮的 PSD 贴纸模板《上篇》
  3. Appium学习实践(三)测试用例脚本以及测试报告输出
  4. Workspace Cloning / Sharing in Jenkins
  5. 初识Oracle
  6. atomic和nonatomic的区别
  7. WPF 之 线程使用
  8. Android(java)学习笔记114:LayoutInflater和findViewById
  9. String类中的equals()方法
  10. 【Android】添加菜单和监听菜单方法详解
  11. 远程方法调用(RMI)原理与示例 (转)
  12. 开源 自由 java CMS - FreeCMS1.9 分纪录
  13. Docker Swarm 中最重要的概念- 每天5分钟玩转 Docker 容器技术(94)
  14. webpack代码分离 ensure 看了还不懂,你打我(转)
  15. Python开发爬虫之理论篇
  16. 对flexbox伸缩概念的深入浅出解释
  17. ELK部署详解--kibana
  18. 【转】STM32 独立看门狗简介
  19. c++对c的加强
  20. 爬虫--Scrapy-参数等级和请求传参

热门文章

  1. 集成学习方法Boosting和Bagging
  2. Linux OOM-killer(内存不足时kill高内存进程的策略)
  3. hbase 修复 hbase hbck
  4. 个人网站(sysoft.net.cn)被k,公司名都搜索不出来了,怎么办?
  5. 以商品超卖为例讲解Redis分布式锁
  6. IBM MQ reason code list
  7. mysql 5.5之参数详解
  8. [C++] C++中的常用库
  9. 【Django】一对多表结构
  10. .NET Core应用的三种部署方式