文档章节

六、Hotspot中的垃圾收集器

Swimmer
 Swimmer
发布于 2016/12/08 08:31
字数 859
阅读 12
收藏 0

一、Serial/Serial Old收集器

  1. 历史最悠久的收集器
  2. 单线程的收集器
  3. 在工作时需要停掉虚拟机所有线程
  4. 优点是在做事专一,动作迅速
  5. 在Client端的新生代中一般使用这个收集器回收,回收200M以内的新生代只需要不到100ms,这对于Client是可以接受的

二、ParNew收集器

  1. Serial收集器的多线程版本
  2. 只有ParNew收集器可以与CMS收集器配合使用

三、Parallel Scavenge收集器

  1. 吞吐连优先的收集器 
  2. 吞吐量:代码运行时间/(代码运行时间 + 垃圾收集时间)

四、CMS收集器

  1. 老年代并发收集器
  2. 基于 标记清除算法实现
  3. 执行垃圾收集时有四个步骤
    • 初始标记(Stop the World):标记一下GC Root能直接关联的对象,速度很快
    • 并发标记:使用可达性分析算法,标记需要回收的对象
    • 重新标记(Stop the World):标记 并发标记 期间变化的对象(多线程)
    • 并发清除
  4. CMS优点:并发收集、低停顿
  5. CMS缺点:
    • 并发占用CPU,导致用户线程变慢
    • 会产生浮动垃圾(并发清除时产生的垃圾),因为在并发清除时还用用户线程在执行,所以要预留一部分内存,所以可以通过参数设定当老年代内存被占用 X% 时触发CMS回收,如果回收失败,会触发Serial Old收集器,进行再一次回收
    • CMS收集器是使用标记清除算法实现的,所以会残生大量内存碎片,所以当CMS收集器触发Serial Old时要进行内存整理操作(这个过程无法并发,所以会导致程序变慢,可以通过参数设定)

 

五、G1收集器

  1. G1收集器是注重停顿时间的收集器
  2. G1收集器可以不需要其他收集器配合,独立管理新生代和老年代
  3. G1收集器将java堆分成多个Region(新生代和老年代穿插在不同的Region里,不再物理隔离),两个Region通过复制算法手机,整体看来通过标记整理算法手机,不会产生内存碎片
  4. 通过建立可预测的停顿时间模型,可以让使用者明确在M毫秒内的内存回收不超过N毫秒
  5. G1收集器,会根据停顿时间模型计算每个Region回收的经验值,根据可以回收的时间(N毫秒)来回收最有回收价值的Region
  6. G1收集器通过Remebered Set记录Region中对象有没有被其他Region中的对象引用(为了避免全堆扫描)
  7. G1收集器的过程:
    • 初始标记(Stop the World):标记一下GC Root能直接关联的对象,速度很快,与CMS不同的是,这个阶段会修改TAMS值,让 并发标记 阶段产生的新对象都在正确可用的Region中创建
    • 并发标记:通过可达性分析算法标记回收的对象
    • 最终标记:修正在并发标记时改变的对象,并记录到Remebered Set Logs中,然后虚拟机将Logs合并到Remebered Set中,这个过程是并行的(非并发)
    • 筛选回收:根据Region的回收价值大小回收

 

© 著作权归作者所有

共有 人打赏支持
Swimmer
粉丝 2
博文 30
码字总数 12958
作品 0
朝阳
程序员
JVM实用参数(六) 吞吐量收集器

原文链接 本文连接 译者:张军 校对:梁海舰 在实践中我们发现对于大多数的应用领域,评估一个垃圾收集(GC)算法如何根据如下两个标准: 吞吐量越高算法越好 暂停时间越短算法越好 首先让我们...

低至一折起
2017/11/23
0
0
《JDK10新特性官方文档》JEP304: 垃圾收集器接口

作者: Roman Kennke 创建时间:2016/08/06 08:45 更新时间:2018/04/09 12:37 类型: 特性 状态: 已关闭/已提交 组件:hotspot/gc 范围:实现类 讨论: openjdk.java.net上的hotspot-gc-de...

floder
01/30
0
0
Hotspot 性能架构 -转

第一章:介绍和概述 Java HotSpot虚拟机是Sun公司的Java平台一个高效的虚拟机实现。Java HotSpot技术提供Java标准平台的基础设施,提供对快速开发、部署关键业务的桌面和企业应用程序的解决方...

刘小兵2014
2011/10/18
0
0
HotSpot 的垃圾收集 - 转

从J2SE 5.0开始,HotSpot JVM共包含四种垃圾收集器,它们全部基于分代算法。 一、代的划分 HotSpot JVM中内存被划分为三代:年幼代(young generation)、年长代(old generation)和永久代(...

刘小兵2014
2011/10/18
0
0
推荐书籍:《Java性能调优指南》

本书作者是Java性能和Java HotSpot 虚拟机领域的佼佼者,帮助你利用现代软工实践提高性能,避免常见错误,从实战生涯中总结技巧和窍门。 利用G1克服并行、串行和CMS垃圾收集器的局限性了解G...

ddddd8
2017/11/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

TypeScript基础入门之高级类型的索引类型(Index types)

转发 TypeScript基础入门之高级类型的索引类型(Index types) 高级类型 索引类型(Index types) 使用索引类型,编译器就能够检查使用了动态属性名的代码。 例如,一个常见的JavaScript模式是从...

durban
2分钟前
0
0
利用碎片化时间Get Linux系统

起初,我做着一份与IT毫无关系的工作,每月领着可怜的工资,一直想改变现状,但无从下手,也就是大家熟知的迷茫。我相信,每一个人都会或多或少的经历过迷茫,迷茫每一个选择,迷茫工作或者生...

Linux就该这么学
37分钟前
0
0
图像显示深入学习一:Activity启动过程

一个月左右写了图像显示深入学习之文章开篇文章表明了自己近期的计划,前半年重新学习了opengl es,c++以及Linux的一些知识,觉得是时候开始看图像这一块的源码了,边看边补缺补漏吧。 作为该...

JerryLin123
今天
1
0
给MySQL授权远程访问

putty登录服务器; 登录MySQL: mysql -u root -p 新建远程用户: CREATE USER 'myusername' IDENTIFIED BY 'mypassword'; 授权: grant all on *.* to john@'101.102.103.104' identified by......

sweethome
今天
1
0
在t-io老巢造谣,不过有造谣的就会有反造谣的!

只发当事人的截图,不发表评论,以免有引导嫌疑 PS: 截图是由不同的人发过来的 本人已经不在此微信群 图3:有造谣的,就有反造谣的 图4是2018-09-23的t-io官方群的一个发言小统计,有助于让...

talent-tan
今天
102
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部