【JVM】程式設計師進階JVM(三)——7大 垃圾回收算器
一、前言
前幾篇部落格,小編向大家介紹了JVM的一些基本知識,包括JVM的執行時的記憶體結構,以及JVM是通過哪些演算法回收物件,Jvm是通過哪些演算法回收來判斷出某些物件是可以回收的。而這些回收的工作都是垃圾回收器來完成的。
在這篇部落格中,小編就從虛擬到現實,向大家介紹幾款垃圾回收器。
二、垃圾回收器巨集觀介紹
學習回收器,思維導圖先行:
這裡呢,我們討論的是JDK1.7 以後的HotSpot虛擬機器中的垃圾收集器,主要是因為在JDK1.7 以後新增了G1回收器。
在HotSpot的JVM虛擬機器中,有7種垃圾回收器。這其中垃圾回收器也是從一代一代改進來的。當然垃圾回收處理的STW的停頓時間也越來越短。效率越來越高。因為我們的堆中,分了年輕代和老年代。每一個部分中用的記憶體收集演算法是不一樣的。針對不同的回收演算法就設定了不同的垃圾收集器。
三、各種垃圾收集器
3.1 Serial
新生代收集器,可以說Serial是最基礎的收集器。
看到Serial就經常相當序列化介面Serializable。雖然這兩個之間沒有任何關係,就是名字相似罷了。
再說Serial收集器,有下面的特點:
單執行緒,當他收集記憶體的時候,所有其他的執行緒都要等待,直到他完成。
複製演算法
ParNew
新生代收集器,可以說ParNew是Serial的一個多執行緒版本。
特點:
多執行緒
複製演算法
回收的時候暫停所有使用者的執行緒
只能配合CMS工作
Parallel Seaverage
新生代收集器,多執行緒,複製演算法,更加關注吞吐量。
特點:
多執行緒
複製演算法
可控制的吞吐量
自適應調節策略
吞吐量 = 使用者程式碼執行時間/(使用者程式碼執行時間+垃圾回收時間)
eg: 虛擬機器執行使用者程式碼時間為99 ,垃圾回收為1 ,則吞吐量為99/(99+1)=99%
自適應調節策略:UseAdaptiveSizePolicy引數,這個引數開啟後,不用手動設定Eden和s1、s2的大小比例,收集器會根據當前虛擬機器執行情況收集效能監控資訊,動態的調整這些引數以供最合適的停頓時間和最大的吞吐量。
可以說,自適應調節策略是Parallel Scaverage和ParNew的主要區別。
Serial Old
老年代回收器。是一個單執行緒,使用標記-整理演算法的垃圾收集器。
特點:
單執行緒
標記-整理演算法
暫停所有使用者執行緒
Parallel Old
老年代收集器。是Parallel Scaverage的老年代版本。使用多執行緒和標記-整理演算法。
特點:
多執行緒
標記-整理演算法
CMS
老年代收集器。
Concurrent Mark Sweep,是一種獲取最短停頓時間為目標的回收器。現在很多業務場合都要求挺短時間短,CMS非常適合這種業務場景。
從Mark Sweep可以看出,這是一種標記清除演算法,步驟:
1.初始標記
2.併發標記
3.重新標記
4.併發清除
特點:
多執行緒
標記清除演算法
對CPU資源敏感
儘可能小的縮短停頓時間
無法處理浮動垃圾
產生記憶體碎片
G1
G1垃圾收集器是面向服務端應用的垃圾收集器。在垃圾收集過程中,是可以替換掉CMS的
特點:
並行與併發:充分利用cpu,縮短STW停頓時間,不用停頓GC操作,併發執行。
分代收集
空間整合:整體上基於標記-整理演算法,區域性上是基於複製演算法實現,不會產生記憶體碎片。
可預測的停頓
四、小結
通過對這些垃圾收集器的理解,對比。相信可以更好的處理這些問題。也希望可以給您帶來幫助。開啟語音,多多交流。
相關文章
- JVM垃圾回收器JVM
- JVM系列(六) - JVM垃圾回收器JVM
- JVM系列(六) – JVM垃圾回收器JVM
- JVM垃圾回收JVM
- [JVM]垃圾回收JVM
- 理解JVM(七):垃圾回收器JVM
- JVM 垃圾回收演算法和垃圾回收器JVM演算法
- Java面試題中高階進階(JVM篇Java垃圾回收)Java面試題JVM
- jvm(三)——jvm垃圾回收演算法以及實現JVM演算法
- [效能][JVM]jvm垃圾回收機制JVM
- JVM垃圾回收概述JVM
- JVM垃圾回收(下)JVM
- JVM - 垃圾回收概述JVM
- 深入探究JVM之垃圾回收器JVM
- 更快的JVM垃圾回收器:ShenandoahJVMNaN
- 【JVM】垃圾回收器總結(2)——七種垃圾回收器型別JVM型別
- JVM(五)垃圾回收器的前世今生JVM
- JVM-垃圾回收篇JVM
- JVM垃圾回收歷險JVM
- JVM 垃圾回收機制JVM
- jvm 自動垃圾回收JVM
- JVM垃圾回收機制JVM
- 淺談JVM垃圾回收JVM
- JVM 中的垃圾回收JVM
- JVM垃圾回收之三色標記JVM
- JVM系列(五) - JVM垃圾回收演算法JVM演算法
- JVM垃圾回收器、記憶體分配與回收策略JVM記憶體
- 再看JVM:垃圾回收那些事JVM
- 淺談JVM與垃圾回收JVM
- 帶你掌握JVM垃圾回收JVM
- 關於JVM的垃圾回收JVM
- JVM垃圾回收演算法JVM演算法
- jvm的垃圾回收機制JVM
- 【JVM進階之路】七:垃圾收集器盤點JVM
- 7種jvm垃圾回收器,這次全部搞懂JVM
- jvm(4)---垃圾回收(哪些物件可以被回收)JVM物件
- JVM垃圾回收機制入門JVM
- 談談 JVM 垃圾回收機制JVM