GC調優記錄(一)

chengtufeiyan發表於2020-11-03

1、學習記錄

a、垃圾確認演算法

**引用計數(referenc count)**--- 記錄指向物件引用的數量,缺點:迴圈引用垃圾無法判斷。
**根可達演算法(root searching)**--- 根物件不可達物件即為垃圾。一個具有註腳的文字。

根物件1

b、垃圾回收演算法

mark-sweep、copying、mark-compact

c、垃圾回收器

目前存在的垃圾回收器包括:
有物理分割槽:young區使用(serial 、parNew、parallel scavenge)、old區使用(CMS、serial old 、parallel old)
無物理分割槽,存在yonge.old邏輯分割槽:G1
無物理分割槽,無邏輯分割槽:ZGC、shenandoah
	windows使用命令檢視垃圾回收器:java -XX:+PrintCommandLineFlags -version
	jdk8預設ps+po(parallel scavenge + parallel old)
	jdk9-jdk13預設G1

d、體會

垃圾回收演算法沿著計算機記憶體,算力的發展,由初代支援單執行緒垃圾回收(serial 、
serial old)---->發展為並行(parallel scavenge 等) --->發展為併發(CMS)。
同時在優化過程中對於yong (enden ,survivor survivor),old區的物理分割槽.、邏輯分割槽同時存在,
到G1的只存在邏輯分割槽(主要分塊region,每個region在不同時間條件可能是不同的邏輯型別,如:eden、old等),再往後發展,也會淡化邏輯分割槽的概念。

2、垃圾回收器引數記錄

a、GC常用引數

  • -Xmn -Xms -Xmx -Xss
    年輕代 最小堆 最大堆 棧空間
  • -XX:+DisableExplictGC
    禁用System.gc() (使用此命令為FGC)
  • -XX:+PrintGC
  • -XX:+PrintGCDetails
  • -XX:+PrintHeapAtGC
  • -XX:+PrintGCTimeStamps
  • -verbose:class
    類載入詳細過程
  • -XX:+PrintVMOptions
  • -XX:+PrintFlagsFinal -XX:+PrintFlagsInitial
    最終使用引數值,初始化引數值(所有)
  • -Xloggc:opt/log/gc.log
  • 設定gc日誌
  • -XX:MaxTenuringThreshold
    升代年齡,最大值15

b、CMS常用引數

  • -XX:+UseConcMarkSweepGC 開啟CMS垃圾回收器
  • -XX:ParallelCMSThreads
    CMS執行緒數量
  • -XX:CMSInitiatingOccupancyFraction
    使用多少比例的老年代後開始CMS收集,預設是68%(近似值,jdk8本地測試,大約62%)

c、G1常用引數

  • -XX:+UseG1GC 開啟G1垃圾回收器
  • -XX:+G1HeapRegionSize
    分割槽大小,建議逐漸增大該值,1 2 4 8 16 32。
    size大小的設定需平衡,過大過小均由缺點
  • G1NewSizePercent
    新生代最小比例,預設為5%
  • G1MaxNewSizePercent
    新生代最大比例,預設為60%
  • GCTimeRatio
    GC時間建議比例,G1會根據這個值調整堆空間
  • ConcGCThreads
    執行緒數量
  • InitiatingHeapOccupancyPercent
    啟動G1的堆空間佔用比例

  1. 根物件包括:JVM stack ,native method stack,runtime constant pool,static reference in method area,Clazz ↩︎

相關文章