栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

垃圾收集器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

垃圾收集器

垃圾收集器
  • 判断对象是否需要回收的策略
    • 引用计数法
    • 可达性分析
  • 垃圾收集器

判断对象是否需要回收的策略 引用计数法

判断对象是否被引用,每被一个对象引用,引用计数+1

可达性分析

从GCRoot开始查找进行可达性分析,若从GC Root出发可达,则对象还被引用,若不可达,则对象应该被回收

垃圾收集器
收集器适用年代搭配的收集器备注
Serial年轻代CMS、Serial Old
ParNew年轻代CMS、Serial Old
Parallel Scanvenge年轻代Serial Old、Parallel Old
CMS老年代Serial、ParNew、Serial Old
Serial Old(MSC)老年代Serial、ParNew、Parallel Scanvenge、CMS
Parallel Old老年代Parallel Scanverge
G1年轻代、老年代面向未来
  1. Serial
    单线程收集垃圾,新生代采用复制算法
    在Client模式下效率比较高,没有线程之间的切换

  2. ParNew
    Serial收集器的多线程版本
    Server模式下虚拟机的首选新生代收集器,除Serial收集器外,只有ParNew可以和CMS配合
    jdk配置参数中使用-XX:+UserConcMarkSweepGC选项后的首选新生代收集器;或者使用-XX:+UserParNewGC强制指定

  3. Parallel Scanvenge
    使用复制算法、多线程,和ParNew不同的是Parallel Scanvenge关注吞吐量,提供-XX:MaxGCPauseMillis参数控制GC最大停止时间,提供-XX:GCTimeRatio参数设置吞吐量。

  4. Serial Old(MCS)
    单线程老年代收集器,采用标记整理算法
    一种用途是在jdk 1.5之前与Parallel Scanvenge收集搭配使用
    另一种用途是当CMS并发收集发生Concurrent Mode Failure时使用,在CMS老年代收集时,剩余空间不够分配对象,会转而用Serial Old收集器收集对象

  5. Parallel Old
    Parallel Old是Parallel Scanvenge收集器的老年代版本,在jdk 1.6后与Parallel Scanvenge搭配
    在1.5时期,Parallel Scanvenge与Serial old使用,由于Serial Old的局限限,无法利用服务器多核cpu优势回收老年代,两种搭配使用效果吞吐量有时不如ParNew与CMS搭配使用效果

  6. CMS
    CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。步骤一共分为四个:初始标记、并发标记、重新标记、并发清除。其中并发处理的过程有并发标记和并发清除,初始标记和重新标记都是单线程处理。
    缺点
    a.无法处理浮动垃圾,会出现Concurrent Mode Failure的失败导致Full GC。由于并发清理阶段用户线程还可以继续运行,会产生新的垃圾,这些垃圾只能到下一次GC时才会被收集,因此需要预留空间给用户线程。在jdk1.6中默认老年代使用了68%内存时会触发GC,在1.6中设置为92%,当GC并发清理期间内存无法满足用户线程需要,就会出现Concurrent Mode failed失败,然后虚拟机采用Serial Old收集器收集内存
    b.由于采取标记清除算法收集,会产生很多内存碎片,当有大对象需要分配内存时会触发fullGC

  7. G1
    初始标记
    并发标记
    最终标记
    筛选回收

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/584359.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号