JAVA性能權威指南2-垃圾收集

JVM的四種垃圾收集器:
    Serial收集器(常用於單CPU環境)  -XX:+UseSerialGC
    Throughput(Parallel)收集器 server級虛擬機,-XX:+UseParallel[Old]GC
    Concurrent收集器 CMS:收集新生代 -XX:+UseParNewGC、-XX:+UseConcMarkSweepGC
    G1收集器     --爲了處理處理超大堆時產生的停頓。 -XX:+UseG1GC

垃圾收集的兩步驟:
查找不再使用的對象
釋放這些對象所管理的內存
所有應用線程都停止運行所產生的停頓稱爲 時空停頓。這種停頓對應用的性能影響很大,調優垃圾收集時,儘量減少這種停頓是最爲關鍵的考量因素。

堆分爲 老年代,新生代;新生代又分爲Eden空間和Survivor空間。

選擇GC算法
取決於應用程序的特徵; 應用的性能目標
GC調優基礎
1 調整堆大小:
堆太小,程序大部分時間浪費在GC上;設置大,停頓時間會變長。

-Xms 初始值  -Xmx 最大值

2 代空間的調整
新生代分配過大,垃圾回收發生頻率就比較低,從新生代晉升到老年代的對象就更少,老年代就相對小。容易被頻繁觸發Full GC.
找到平衡點是解決問題的關鍵
所有調整代空間的命令行標誌調整都是新生代空間

-XX:NewRatio=N   新老空間佔用比率
-XX:NewSize=N   新生代初始大小
-XX:MaxNewSize=N 新生代空間最大大小
-XmnN 上面兩個設成同一個值

3 永久代和元空間的調整

-XX:PermSize=N  永久代大小
-XX:MaxPermSize=N
-XX:MetaspaceSize=N 元空間大小
-XX:MaxMetaspaceSize=N 

4 控制併發

-XX:ParallelGCThreads=N 線程數

5 自適應調整

-XX:+PrintAdaptiveSizePolicy

垃圾回收工具
開啓GC的日誌功能: -verbose:gc  -XX:+PrintGC -XX:+PrintGCDetails
-XX:+PringGCTimeStamps  -XX:+PrintGCDateStamps
-Xloggc:filename

GC Histogram可以讀入GC日誌,更加日誌生成對應圖標和表格

垃圾收集算法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章