JVM垃圾收集器总结

来源:互联网 发布:捷易通软件怎么样 编辑:程序博客网 时间:2024/05/17 00:01

垃圾回收器暂时有七种,其中五种是比较简单易懂的,我就用了表格整理一下,记住这些内容即可。CMS和G1是面试时候相当重要的知识点,所以下面也会详细点介绍。

这里写图片描述


CMS收集器
CMS是一种以获取最短停顿时间的收集器,响应速度极快。也是属于老年代垃圾收集器,使用的回收算法是标记-清除。
整个过程分为4个步骤:

  1. 初始标记(cms initial mark)
  2. 并发标记(cms concurrent mark)
  3. 重新标记(cms remark)
  4. 并发清除(cms concurrent sweep)

缺点:

  1. CMS是真正的并发型垃圾收集器,所以对cpu资源敏感。CMS默认启动的回收线程数是(cpu数量+3)/4

  2. CMS收集器无法处理浮动垃圾,因为是可以比喻为一边垃圾回收,但是一边又有人扔垃圾

  3. 因为是使用标记-清除算法,所以根据标记-清除算法的特点,内存肯定存在碎片。


G1收集器(Garbage-First)
当今收集器技术发展的最前沿成果之一,早在jdk1.7刚刚确定项目目标。
特点:

  1. 并行与并发:充分利用多cpu、多核环境下的硬件优势

  2. 分代收集:虽然G1不需要其他收集器搭配使用就能独立管理整个gc堆,但是能够采用不同的方式去处理新创建的对象和已经存活了一段时间、熬过多次gc的旧对象以获取更好地收集效果

  3. 空间整合:因为G1回收器使用的垃圾回收算法是标记-整理,所以自然而然地不存在内存空间不连续的情况

  4. 可预测停顿:这个是最屌的,降低停顿时间是G1和CMS共同追求的目标,但是G1除了追求低停顿时间以外,还能建立停顿时间模型,能让使用者明确在一个长度为M毫秒的时间片内,消耗在垃圾收集上的时间不超过N毫秒,这几乎已经是实时JAVA的垃圾收集器特征了。


G1收集器的运作步骤大致分为下面几个:

  1. 初始标记(initial marking)
  2. 并发标记(concurrent marking)
  3. 最终标记(final marking)
  4. 筛选回收(live data counting and evacuation)

CMS和G1相比,虽然都是立足于低停顿时间的垃圾收集器,但是因为可预测停顿以及不需要搭配其他垃圾收集器使用,所以G1将会取得最终的胜利。但是如果追求高吞吐量的话,G1不会带来什么好的表现。
所以只有根据实际应用需求、实现方式选择最优的手机方式才能获取最高的性能,没有固定的收集器、参数组合,也没有最优的调优方法,虚拟机也没有什么必然的内存回收行为。正是印证了那句谚语,“No Free Lunch”!

1 0
原创粉丝点击