文档章节

六、Hotspot中的垃圾收集器

Swimmer
 Swimmer
发布于 2016/12/08 08:31
字数 859
阅读 13
收藏 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的垃圾回收策略,设置和调优

引言: 我们都知道JVM内存由几个部分组成: Java栈、程序计数器(ProgramCounter)寄存器、本地方法栈、堆、方法区、运行常量池。 JVM垃圾回收仅仅针对公共内存区域即:堆和方法区进行。 本文...

小车车
2016/09/22
46
0
HotSpot 的垃圾收集 - 转

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

刘小兵2014
2011/10/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周三乱弹 —— 有一天考拉麻麻拉肚子了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @瘟神灬念 :分享周汇洋的单曲《Man Srae(曼斯拉之舞)》:美滋滋。。。。 手机党少年们想听歌,请使劲儿戳(这里) 我听了一下 赶紧关了, ...

小小编辑
37分钟前
12
3
oh-my-zsh 自定义

GitHub 地址 基于 oh-my-zsh 的自定义配置,增加了一些个人常用插件与皮肤。 采用的是 git submodule 来维护,包括 oh-my-zsh,之所以这么搞,主要是手头有多台 linux 需要维护, 每台机器、...

郁也风
今天
6
0
Docker安装踩坑:E_FAIL 0x80004005的解决

参考 菜鸟教程--Windows Docker 安装 http://www.runoob.com/docker/windows-docker-install.html 官方文档-Install Docker Toolbox on Windows https://docs.docker.com/toolbox/toolbox_in......

karma123
今天
6
0
js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理:是当变量进入环境时,将这个变量标记为“...

Jack088
昨天
18
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
昨天
27
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部