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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM