JVM-垃圾收集器
本篇主要介紹一下JVM的幾種垃圾收集器。
其示意圖例如以下所看到的,上面的三個是新生代的收集器,
以下三個是老年代的收集器。當中G1收集器是能夠用于新生代和老年代的收集工作。
JVM垃圾收集器
1、Serial(串行收集器):用于新生代GC,復制算法,啟動時默覺得Client模式,GC的線程為單線程。缺點是由于單線程GC,會造成中斷的時間(Sop-the-world)比較大。
(對于單核的CPU來說,比并行收集的效率要高)其示意圖例如以下所看到的:
Serial串行收集器
2、ParNew(并行收集器):與Serial類似,不同點在于它一般用于新生代的并行回收,并且通常情況下執行在Server模式(單核CPU下。性能可能比Serial還要差)。示意圖例如以下所看到的:
ParNew并行收集器
3、Parallel Scavenge(并行回收):用于新生代回收,復制算法,并行收集。
與ParNew的不同是它的關注點不同,它能夠精確的控制吞吐量。【吞吐量= 程序執行時間/(程序執行時間 + 垃圾收集時間),比如:JVM共執行了100min。當中垃圾收集花掉1min,那吞吐量就是99%】示意圖例如以下所看到的:
Parallel Scavenge并行收集
4、Serial Old(串行收集器):是Serial收集器的老年代版本號。使用標記-壓縮(標記-整理)收集算法,主要用于啟動模式為Client的JVM。
示意圖能夠參考Serial串行收集器。
5、Parallel Old(并行收集器):是Parallel的老年代版本號。使用標記-壓縮(標記-整理)收集算法。
其示意圖能夠參考Parallel并行收集。
6、CMS(concurrent mark sweep):并發收集器(發生GC時,GC線程與應用線程同一時候執行)。是一種以最短響應為目標的收集器,適用于B/S架構的執行環境。
使用標記-清除算法,因此會產生大量的內存碎片。CMS的收集大概能夠分為一下幾個步驟:【初始標記 initial mark】--->【并發標記 concurrent mark】--->【又一次標記 remark】--->【并發清除 concurrent sweep】。
其示意圖例如以下所看到的:
CMS并發收集器
7、G1收集器:是一款面向服務端的收集器,未來有可能替代CMS收集器。
G1收集器具備下面特點:
a、并發與并行:能充分利用多核CPU的硬件特性來縮短停頓時間(Stop-the-world),能夠與應用線程一同執行。
b、分帶搜集:與其它收集器一樣。分代的概念在G1中也存在。
G1可以自己獨立的去管理GC,它可以採用不同的方式去處理不同存活時間的對象。
c、空間整合:從總體上看G1使用的是標記-壓縮(整理)的GC算法。這就意味著在JVM執行的時候不會產生大量的內存碎片。從而能夠讓程序長時間的執行。
d、可預測的停頓:與CMS相比。G1除了能夠有更短的停頓時間之外,還能夠建立可預測的停頓時間模型。
不計算Remembered Set的操作,G1收集器的運作大概能夠分為下面幾個步驟:【初始標記 initial marking】--->【并發標記 concurrent marking】--->【終于標記 final marking】--->【篩選回收 live data counting and evacuation】
G1并發并行收集
GC參數總結
-XX:+<option> 啟用選項
-XX:-<option> 不啟用選項
-XX:<option>=<number>?
-XX:<option>=<string>
- -XX:+UseSerialGC:在新生代和老年代使用串行收集器
 - -XX:SurvivorRatio:設置eden區大小和survivior區大小的比例
 - -XX:NewRatio:新生代和老年代的比
 - -XX:+UseParNewGC:在新生代使用并行收集器
 - -XX:+UseParallelGC :新生代使用并行回收收集器
 - -XX:+UseParallelOldGC:老年代使用并行回收收集器
 - -XX:ParallelGCThreads:設置用于垃圾回收的線程數
 - -XX:+UseConcMarkSweepGC:新生代使用并行收集器,老年代使用CMS+串行收集器
 - -XX:ParallelCMSThreads:設定CMS的線程數量
 - -XX:CMSInitiatingOccupancyFraction:設置CMS收集器在老年代空間被使用多少后觸發
 - -XX:+UseCMSCompactAtFullCollection:設置CMS收集器在完畢垃圾收集后是否要進行一次內存碎片的整理
 - -XX:CMSFullGCsBeforeCompaction:設定進行多少次CMS垃圾回收后,進行一次內存壓縮
 - -XX:+CMSClassUnloadingEnabled:同意對類元數據進行回收
 - -XX:CMSInitiatingPermOccupancyFraction:當永久區占用率達到這一百分比時。啟動CMS回收
 - -XX:UseCMSInitiatingOccupancyOnly:表示僅僅在到達閥值的時候,才進行CMS回收
 
GC參數組合
GC參數------------------------------------------------------------------Young------------------------tenured
====================================================================
-XX:+UseSerialGC----------------------------------------------------Serial-------------------------Serial Old
-XX:+UseParallelGC--------------------------------------------------Parallel Scavenge -------Serial Old
-XX:+UseConcMarkSweepGC-------------------------------------ParNew----------------------CMS ?
-XX:+UseParNewGC-------------------------------------------------ParNew----------------------Serial Old
-XX:+UseParallelOldGC---------------------------------------------Parallel Scavenge---------Parallel Old
-XX:+UseConcMarkSweepGC?-XX:+UseParNewGC--------Serial--------------------------CMS?
-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC-------G1-----------------------------G1
轉載于:https://www.cnblogs.com/lxjshuju/p/6888999.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
                            
                        - 上一篇: 数论入门知识
 - 下一篇: My97DatePicker详细说明