《深入理解JAVA虚拟机》----------第三章 垃圾收集器与内存分配策略,笔记(下)
1.垃圾收集器

1.1 Serial收集器
这个收集器是一个单线程的收集器,它在进行垃圾收集时,必须暂停其他所有的工作线程。
它是虚拟机运行在Client模式下的默认新生代收集器,它简单而高效。
1.2 ParNew收集器
其实就是Serial收集器的多线程版本,目前只有它能与CMS收集器配合工作。
1.3 Parallel Scavenge收集器
Parallel Scavenge收集器是一个新生代的收集器,使用复制算法。
它经常被称为“吞吐量优先”的收集器,它的特点就是它的关注点与其他收集器不同,CMS等收集器的关注点是尽可能地缩短垃圾收集时用户线程的停顿时间,而这个收集器的目标则是达到一个可控制的吞吐量。
高吞吐量可以高效率地利用CPU时间,尽快完成程序的运算任务,主要适合在后台运算而不需太多交互的任务。
它还有一个参数-XX:+UseAdaptiveSizePolicy值得关注。这是一个开关参数,当这个参数打开之后,就不需要手工指定新生代的大小(-Xmn)、Eden与Survivor区的比例(-XX:SurvivorRatio)、晋升老年代对象大小(-XX:PretenureSizeThreshold)等细节参数了,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或最大的吞吐量,这种调节方式成为“GC自适应的调节策略(GC Ergonomics)”
1.4 Serial Old收集器
它是Serial的老年代版本,也是一个单线程收集器。使用“标记-整理”算法,在Client模式下的虚拟机使用。
1.5 Parallel Old 收集器
它是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。主要用于“吞吐量优先”以及CPU资源敏感场合,Parallel Scavenge加Parallel Old收集器可以优先考虑。
1.6 CMS收集器
CMS收集器是一种以获取最短回收停顿时间为目标的收集器。可以使系统停顿时间短,给用户带来较好的体验。
CMS收集器基于“标记-清除”算法实现:
- 初始标记
- 并发标记
- 重新标记
- 并发清除
其中,初始标记、重新标记这两个步骤仍然需要“Stop The World”。
- 初始标记仅仅只是标记一下FC Roots能直接关联到的对象,速度很快
- 并发标记阶段就是进行GC Roots Tracing的过程
- 重新标记阶段则是为了修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录。
- 并发清除与并发标记这两个耗时最长的操作,从总体上说CMS收集器的内存回收过程是与用户线程一起并发执行的。
CMS的缺点
- CMS收集器对CPU资源非常敏感:当CPU不足四个的时候,对用户程序的影响就很大。因为它要分出一半的运算能力去执行收集器线程。
- CMS收集器无法处理浮动垃圾,可能出现“Concurrent Mode Failure”失败而导致另外一次Full GC的产生。
- CMS是一款基于“标记-清除”算法实现的收集器,这就意味着收集结束时会有大量的空间碎片产生。将会给大对象分配带来很大麻烦。
1.7 G1收集器
G1是一款面向服务端应用的垃圾收集器。特点如下:
- 并行与并发:G1能充分利用多CPU、多核环境下的硬件优势,使用多个CPU来缩短STP停顿时间。
- 分代收集:G1不需要其他收集器配合就能独立管理整个GC堆,但是它能够采用不同的方式去处理新创建的对象和已经存活的对象。
- 空间整理:G1从整体看是基于“标记-整理”算法实现的,从局部(两个Region之间)上看是基于“复制”算法实现的。保证G1运作期间不会产生内存空间碎片。
- 可预测的停顿:可以明确指定在一个长度为M毫秒的时间片段内,消耗在垃圾收集器上时间不得超过N毫秒。
G1讲解:
G1收集器将Java堆的内存分为多个大小相等的独立区域(Region),虽然还保留有新生代和老年代的概念,但新生代和老年代不再是物理隔离的,它们都是Regionde 的集合。G1在后台维护一个优先列表,每次根据允许收集的时间,优先回收最大的Region。
G1运作过程
- 初始标记:标记GC Roots能直接关联到的对象并且修改TAMS的值,让用户程序并发运行时还能在Region中创建对象,这个阶段需要停顿线程。(耗时较短)
- 并发标记:从GC Roots中对堆对象进行可达性分析,找出存活对象。但可与用户程序并发执行。(耗时长)
- 最终标记:修正在并发标记期间因用户程序继续运作而导致标记产生变动的那一部分标记记录。
- 筛选回收:首先对各个Region的回收价值和成本进行排序,根据用户期望的GC停顿时间来制定回收计划。
《深入理解JAVA虚拟机》----------第三章 垃圾收集器与内存分配策略,笔记(下)的更多相关文章
- [Note][深入理解Java虚拟机] 第三章 垃圾收集器与内存分配策略笔记
书上关于GCTimeRatio的讲解有点难以理解,查看Oracle的文档后重新理解了下 -XX:GCTimeRatio 运行时间 / GC时间 当GCTimeRatio为19时,运行时间是GC时间的1 ...
- <<深入Java虚拟机>>-第三章-垃圾收集器与内存分配策略-学习笔记
垃圾收集 垃圾收集(Garbage Collection,GC),垃圾收集需要完成的三件事情. 哪些对象需要回收 什么时候回收 如何回收 如何确定对象已死(即不可能在被任何途径引用的对象) 引用计数算 ...
- [深入理解JVM虚拟机]第3章-垃圾收集器、内存分配策略
垃圾收集器 判断对象是否需存活 回收堆 判断对象是否存活: 方法一:引用计数法.对象被引用一次就+1,当为0时回收对象.缺点:无法解决循环引用问题. 方法二:可达性分析算法.记录当前对象是否有和GC ...
- 深入理解java虚拟机(2)------垃圾收集器和内存分配策略
GC可谓是java相较于C++语言,最大的不同点之一. 1.GC回收什么? 上一篇讲了内存的分布. 其中程序计数器栈,虚拟机栈,本地方法栈 3个区域随着线程而生,随着线程而死.这些栈的内存,可以理解为 ...
- 《深入理解java虚拟机》第三章 垃圾收集器与内存分配策略
第三章 垃圾收集器与内存分配策略 3.1 概述 哪些内存需要回收 何时回收 如何回收 程序计数器.虚拟机栈.本地方法栈3个区域随线程而生灭. java堆和方法区的内存需要回收. 3.2 对象已死吗 ...
- JVM学习笔记-第三章-垃圾收集器与内存分配策略
JVM学习笔记-第三章-垃圾收集器与内存分配策略 tips:对于3.4之前的章节可见博客:https://blog.csdn.net/sanhewuyang/article/details/95380 ...
- 深入了解Java虚拟机(2)垃圾收集器与内存分配策略
垃圾收集器与内存分配策略 由于JVM中对象的频繁操作是在堆中,所以主要回收的是堆内存,方法区中的回收也有,但是比较谨慎 一.对象死亡判断方法 1.引用计数法 就是如果对象被引用一次,就给计数器+1,否 ...
- 读书笔记,《深入理解java虚拟机》,第三章 垃圾收集器与内存分配策略
要实现虚拟机,其实人们主要考虑完成三件事情: 第一,哪些内存需要回收: 第二,什么时候回收: 第三,如何回收. 第二节,对象已死吗 垃圾收集其实主要是针对java堆里面的数据来说的,传统的垃圾收 ...
- 深入理解Java虚拟机 第三章 垃圾收集器 笔记
1.1 垃圾收集器 垃圾收集器是内存回收的具体实现.以下讨论的收集器是基于JDK1.7Update14之后的HotSpot虚拟机.这个虚拟机包含的所有收集器有: 上图展示了7种作用于不同分代的收集 ...
随机推荐
- 微信小程序笔记<一>初识小程序
一.IDE界面介绍 编辑界面 调试界面 项目管理界面 左侧工具介绍 二.项目文件类型及结构介绍 这是一个初始小程序的项目目录,其中涉及四种文件类型: *.js:JavaScript文件(JavaScr ...
- StanFord ML 笔记 第六部分&&第七部分
第六部分内容: 1.偏差/方差(Bias/variance) 2.经验风险最小化(Empirical Risk Minization,ERM) 3.联合界(Union bound) 4.一致收敛(Un ...
- TessorFlow学习 之 序言
2017.10.23日记录: 感觉平时自己学的还不错的,可是面试的时候才发现自己是个渣渣~~,真的感觉学习不能闭门造车! 面试了图像处理算法工程师-->> 1.精通哪门语言?C.C++.P ...
- 安装hyperledger fabric V1.0.0-beta
安装文档位置: https://github.com/hyperledger/fabric fabric代码托管地址 https://hyperledger-fabric.readthedoc ...
- JDK-1.8-CopyOnWriteSet
CopyOnWriteSet 看了下CopyOnWriteSet源码,底层使用的是CopyOnWriteList,根据底层的实现,每次读取都是N的复杂度.每次写也是N的复杂度.有个代码可以看一下, 来 ...
- IntelliJ IDEA 编译代码报错 找不到符号 符号: 找不到符号包 包
在使用IDEA的时候,经常出现过找不到包或者找不到符号的情况,可以尝试以下几种方式来解决 1.如果项目使用的是Maven可以使用Maven-Reimport 2.还可以 Invalidate and ...
- 纯CSS3实现垂直居中的九种方法
浏览时看到的资料,每个都做了测试,很好,就先收了~ 测试的是谷歌浏览器,没有任何问题,用360,IE11,火狐,搜狗浏览器做测试时,第五个方法在360,搜狗,和IE11有点问题,第七个在IE11有问题 ...
- 《汇编语言 基于x86处理器》第十章结构和宏部分的代码
▶ 书中第十章的程序,主要讲了结构与宏的使用 ● 代码,使用结构,对比是否对齐的性能差距 INCLUDE Irvine32.inc INCLUDE macros.inc structN STRUCT ...
- python学习笔记_week19
note 上节内容回顾: 1.Django请求生命周期 -> URL对应关系(匹配) -> 视图函数 -> 返回用户字符串 -> URL对应关系(匹配) -> 视图函数 ...
- 浅析USB之设备枚举
当一个USB设备插入主机后,会有以下活动: 配上状态图