一圖勝千言--經典垃圾回收器

前言

本文爲《深刻理解Java虛擬機(第3版)》學習筆記。算法

思惟導圖連接:提取碼:s8jo多線程


經典垃圾收集器

新生代收集器

Serial收集器

  • 概述:單線程工做的收集器,必須執行STW進行垃圾收集併發

  • 垃圾收集算法app

    • 複製算法
  • 優勢佈局

      1. 簡單高效
      1. 全部收集器裏面額外內存消耗最少的

ParNew 收集器

  • 實質上是Serial收集器的多線程並行版本學習

  • 垃圾收集算法spa

    • 複製算法
  • 後續版本ParNew合併入CMS專門處理新生代線程

Parallel Scavenge收集器

  • 並行收集器可控制的吞吐量設計

  • 垃圾收集時間的縮短是以犧牲吞吐量和新生代空間爲代價換取的,新生代調小後,直接致使垃圾收集發生得更頻繁,吞吐量也就降下來了3d

  • 垃圾收集算法

    • 複製算法

老年代收集器

Serial Old收集器

  • Serial收集器的老年代版本

  • 垃圾收集算法

    • 標記-整理算法

CMS(Concurrent Mark Sweep)收集器

  • 第一款真正意義上支持併發的垃圾收集器,首次實現讓垃圾收集線程與用戶線程(基本上)同時工做

  • 垃圾收集算法

    • 標記-清除算法
  • 優勢

    • 併發低停頓
  • 缺點

    • CMS收集器只能和ParNew或Serial收集器配合工做,沒法和Parallel Scavenge配合工做。jdk1.9版本將ParNew合併入CMS專門處理新生代
    • 因爲採用標記-清除算法,當空間碎片過多時,大對象分配空間會帶來麻煩,每每不得不提早觸發Full GC。解決方法採用進入Full GC前先進行碎片整理
  • 標記過程

    • 初始標記-->併發標記-->從新標記-->併發清除

Parallel Old收集器

  • Parallel Scavenge收集器的老年代版本

  • 垃圾收集算法

    • 標記-整理算法

新生代和老年代收集器

G1(Garbage First) 收集器

  • 概念

    • 再也不採用固定的新生代老年代設計,而是將連續的Java堆劃分爲多個大小相等的獨立區域(Region),每一個Region可根據須要扮演新生代的Eden空間、Survivor空間,或老年代空間。收集器對扮演不通角色的Region採用不一樣的策略去處理
  • 特色

      1. 能夠指定最大停頓時間
      1. 分Region的內存佈局
      1. 按收益動態肯定回收集
  • 垃圾收集算法

    • 總體上基於標記-整理算法,局部基於標記-複製算法
  • 標記過程

    • 初始標記-->併發標記-->最終標記-->篩選回收

Shenandoah收集器

  • RedHat公司開發,openJDK12新特性,Oracle明確拒絕支持。與G1高度類似,甚至比G1更優秀。自行了解
相關文章
相關標籤/搜索