Java技術點速記 | 垃圾收集與內存分配

簡述一下JAVA中JVM使用的常見垃圾收集方法和技術。

垃圾標記方法

  1. 引用計數
  2. 可達性分析

垃圾收集方法

  1. 標記-清除
    標記對象後統一回收,存在回收效率和內存碎片的問題。
  2. 標記-複製
    將存活對象統一移動到另一部分內存空間裏去,問題是內存可用率降低。
  3. 標記-整理
    移動存活對象向空間的某一端然後釋放邊界外空間,問題是計算負擔較大。

垃圾收集器

  1. Serial :早期新生代垃圾收集器,簡單高效內存消耗小但是存在停頓時間長的問題。
  2. ParNew :Serial收集器的多線程版本
  3. Parallel Scavenge : 基於標記-清除的多線程新生代收集器。相比於ParNew增加了吞吐量控制(即保證垃圾收集時間與用戶代碼執行時間等於某個比例)。
  4. Parallel Old :Parallel Scavenge的老年代版本,基於標記-整理。
  5. CMS :通過初始標記、併發標記、重新標記、併發清除四個步驟降低停頓時間,其中併發標記和併發清除不需要停頓用戶線程,重新標記是用來修正併發標記期間多線程導致的標記對象變動。
  6. G1(Garabge First) : 將java堆劃分成多個大小相等的Region,通過優先級列表以實現最高效回收。相比CMS,G1更接近“標記-整理”算法。
  7. Shenandoah :支持併發標記、併發回收、併發引用更新,具有比G1更好的性能。
  8. ZGC :使用染色體指針(Colored Pointer)極大降低了停頓時間,但也因此導致ZGC管理的內存不能超過4TB,但由於其出色的性能使得ZGC是未來的首選收集器之一。

我的微信鏈接 ,歡迎關注交流 JVM技術點速記 | 垃圾收集與內存分配

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