码迷,mamicode.com
首页 > 编程语言 > 详细

Java专题二十二:垃圾回收(GC)

时间:2020-06-15 17:25:41      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:算法   分代   region   相同   垃圾回收   ade   class   这一   时间短   

Java专题二十二:垃圾回收(GC)

22.1. 垃圾回收算法

22.1.1. 复制算法

复制算法将内存按容量划分为大小相等的两块,每次只使用其中的一块,当这一块内存用完了,就将还存活着的对象复制到另一块上面,然后再把已经使用过的内存空间一次清理掉

22.1.2. 标记-清除算法

标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段

  • 标记阶段:通过根节点,标记所有从根节点开始的可达对象
  • 清除阶段:清除所有未被标记的对象。

22.1.3. 标记-整理算法

标记-整理算法与标记-清除算法类似

  • 标记阶段:通过根节点,标记所有从根节点开始的可达对象
  • 整理清除阶段:先将被标记的对象(存活的)移到一端,再清除边界以外的内存

22.1.4. 分代收集算法

根据对象存活周期的不同将内存划分为新生代和老年代,又根据其特点采用不同收集算法,一般情况如下:

  • 新生代:复制算法
  • 新生代:标记-清除或标记-整理算法

22.2. 垃圾回收器

22.2.1. Serial收集器

  • 作为新生代收集
  • 基于复制算法
  • 单线程执行垃圾回收,回收时,程序会暂停手上的工作,然后单线程执行垃圾回收

22.2.2. ParNew收集器

多线程版本的Serial收集器

22.2.3. Serial Old收集器

  • Serial收集器的老年代版本,作为老年代收集
  • 基于标记-整理算法
  • 单线程执行垃圾回收,回收时,程序会暂停手上的工作,然后单线程执行垃圾回收

22.2.4. Parallel Scavenge收集器

  • 作为新生代收集
  • 并行多线程收集
  • 基于复制算法
  • 追求高的垃圾回收吞吐量(总时间与垃圾回收时间的比例)

22.2.5. Parallel Old收集器

  • Parallel Scavenge收集器的老年代版本,作为老年代收集
  • 并行多线程收集
  • 基于标记-整理算法
  • 追求高的垃圾回收吞吐量(总时间与垃圾回收时间的比例)

22.2.6. CMS收集器

CMS收集器(Concurrent Mark Sweep)

  • GC工作线程与用户线程可以并发执行
  • 仅作为老年代收集
  • 基于标记-清除算法
  • 停顿时间短(STW: stop the world, 程序暂停去执行垃圾回收线程)

22.2.7. G1收集器

将内存分为多个大小相同的区域Region,每个Region拥有各自的分代属性(新生代、存活代、老年代)
G1对于每个Region都维护一个Remembered Set,用于记录对象引用的情况。当GC发生的时候根据Remembered Set的引用情况去搜索

Java专题二十二:垃圾回收(GC)

标签:算法   分代   region   相同   垃圾回收   ade   class   这一   时间短   

原文地址:https://www.cnblogs.com/myibu/p/13132051.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!