深刻理解JVM-垃圾回收器

看完《深刻理解JVM》,結合網上資料後根據跟人理解整理出的簡潔版,主要關注是什麼, 怎麼作到的,特色等,沒有進入深刻剖析,旨在快速瞭解,具體應用時我的再根據具體點去進行深刻。歡迎留言討論!html

 

是什麼?算法

     垃圾回收器是垃圾回收算法的包裝,能夠在JVM中設置須要使用的垃圾回收器;多線程

怎麼作?併發

     Serial收集器spa

          單線程進行垃圾回收, 執行回收過程當中,程序會暫停。.net

          特色:簡單高效,適用於單個CPU場景。經常使用於新生代回收;線程

     SerialOld:      Serial的老年代版本;用於老年代回收;htm

     parnew收集器:blog

          Serial 的多線程版本,回收過程當中,程序也會暫停;內存

          特色:適合多核場景,用於新生代回收,能夠與CMS配合;

      Parallel收集器:

         並行回收,程序會暫停,可控制吞吐量;

         特色:吞吐量優先,更關注可控制的吞吐量,用於新生代回收;

     ParallelOld收集器:paraller老年代版本;

      parallel+parallelOld  爲吞吐量優先組合,當應用程序運行在具備多個CPU上,對暫停時間沒有特別高的要求時,即程序主要在後臺進行計算,而不須要與用戶進行太多交互

      例如,那些執行批量處理、訂單處理、工資支付、科學計算的應用程序;

      cms收集器:

          採用標記清除算法,多線程回收,僅用於老年代;

          運做流程:初始標記、併發標記、從新標記、併發清除

          在併發標記、併發清除階段能夠多線程並行進行;

          特色:併發收集,低停頓,以回收最短停頓時間爲目標,適用於常見B/S場景;

          缺點:

               須要內存大,影響吞吐;

               沒法及時清理浮動垃圾;

               產生大量內存碎片;

          解決辦法:

             經過 -XX:CMSInitiatingOccupancyFraction設置預留空間,以減小由於浮動垃圾,致使內存空間沒法知足致使的fullgc;

             經過 -XX:+UseCMSCompactAtFullCollection開啓碎片合併整理;

             配合-XX:+CMSFullGCsBeforeCompaction設置執行多少次不壓縮的fullgc後進行一次整理壓縮;

 

       G1收集器:

              1.7版本推出,多線程處理,可管理整個堆內存的垃圾回收:

              運做流程:初始標記、併發標記、最終標記、篩選回收

              特色:

                    結合多種垃圾算法,空間整合,不產生碎片

                    低停頓的同時實現高吞吐量

              場景:面向服務端應用,針對具備大內存、多處理器的機器;

                        最主要的應用是爲須要低GC延遲,並具備大堆的應用程序提供解決方案;

                        如:在堆大小約6GB或更大時,可預測的暫停時間能夠低於0.5秒;

                    

 

經常使用參數:

-XX:+UseSerialGC:在新生代和老年代使用串行收集器

-XX:+UseParNewGC:在新生代使用並行收集器

-XX:+UseParallelGC :新生代使用並行回收收集器,更加關注吞吐量

-XX:+UseParallelOldGC:老年代使用並行回收收集器

-XX:ParallelGCThreads:設置用於垃圾回收的線程數

-XX:+UseConcMarkSweepGC:新生代使用並行收集器,老年代使用CMS+串行收集器

-XX:ParallelCMSThreads:設定CMS的線程數量

-XX:+UseG1GC:啓用G1垃圾回收器

-XX:InitiatingHeapOccupancyPercent:當整個Java堆的佔用率達到參數值時,開始併發標記階段;默認爲45;

-XX:MaxGCPauseMillis:爲G1設置暫停時間目標,默認值爲200毫秒;

-XX:G1HeapRegionSize:設置每一個Region大小,範圍1MB到32MB;目標是在最小Java堆時能夠擁有約2048個Region;

 

 

參考地址:

  http://www.cnblogs.com/leefreeman/p/7402695.html

  http://blog.csdn.net/tjiyu/article/details/53983650

相關文章
相關標籤/搜索