G1垃圾收集器设计目标与改良手段【纯理论】
在之前已经详细对CMS垃圾回收器进行了学习,今天准备要学习另一个全新的垃圾收集器---G1(Garbage First Collector 垃圾优先的收集器),说是一种全新的,其实G1垃圾收集器已经出现了N多年了,只是从发展到成熟是需要经历一定的过程,oracle官方计划在jdk9中将G1变成默认的垃圾收集器,以替代CMS, 可见G1肯定有它独特的地方,它跟我们之前所学的各种垃圾底层是完全不一样的,比如最明显的不同是以前的分代收集方式是将堆划分为新生代、老年代两个区域,而新生代又划分为Eden和两个Survivor,也就是从物理的结构就明确的做了区域划分,但是!!!G1它依据的物理形态跟我们之前所接触的垃圾收集器完全不一样了,也就是明显会感觉到G1里面的堆内存没有明显的区域划分的,也就是这一块区域是新生代,那一块区域就是老年代了,所以接下来也是从理论开始学习,之后再用实践来论证理论:
吞吐量:
- 吞吐量关注的是,在一个指定的时间内,最大化一个应用的工作量。
- 如下方式来衡量一个系统吞吐量的好坏:
1、在一个小时内同一个事务(或者任务、请求)完成的次数(tps,实际中还会经常见qps,每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准)。
2、数据库一小时可以完成多少次查询。 - 对于关注吞吐量的系统,卡顿是可以接受的,因为这个系统关注长时间的大量任务的执行能力,单次快速的响应并不值得考虑。
响应能力:
- 响应能力指一个程序或者系统对请求是否能够及时响应,比如:
1、一个桌面UI能多快地响应一个事件。
2、一个网站能够多快返回一个页面请求。
3、数据库能够多快返回查询的数据。 - 对于这类对响应能力敏感的场景,长时间的停顿是无法接受的。
以上是用来评价一个系统的两个很重要的指标,介绍这两个指标的原因是因为G1就是用来解决这样的问题而应运而生的。
G1 Garbage Collector:
- g1收集器是一个面向服务端的垃圾收集器,适用于多核处理器、大内存容量的服务端系统。
- 它满足短时间gc停顿的同时达到一个较高的吞吐量。
- JDK7以上版本适用【通过配置JVM的参数来指定既可】。
以上可以看到G1在吞吐量和响应能力上都进行了兼顾。
G1收集器的设计目标:
- 与应用线程同时工作,几乎【注意措辞】不需要stop the world(与CMS类似);
- 整理剩余空间,不产生内存碎片(CMS只能在Full GC时,用stop the world整理内存碎片)。
- GC停顿更加可控;【对于CMS来说如果出现了Full GC时,则会对新生代和老年代的堆内存进行完整的整理,停顿时间就不可控了】
- 不牺牲系统的吞吐量;
- gc不要求额外的内存空间(CMS需要预留空间存储浮动垃圾【这个在学习CMS中已经阐述过了,其实就是CMS回收的过程跟用户线程是并发进行的,所在在标记或者清除的同时对象的引用还会被改变,使得原来对象本来不是垃圾,当CMS清理时该对象已经变成了垃圾了,但是CMS认为它还不是垃圾,所以该对象的清除工作就会放到下一次了,所以将这种对象则称之为浮动垃圾】)
G1垃圾收集器设计目标与改良手段【纯理论】的更多相关文章
- G1垃圾收集器和CMS垃圾收集器 (http://mm.fancymore.com/reading/G1-CMS%E5%9E%83%E5%9C%BE%E7%AE%97%E6%B3%95.html#toc_8)
参考来源 JVM 体系架构 堆/栈的内存分配 静态和非静态方法的内存分配 CMS 回收算法 应用场景 CMS 垃圾收集阶段划分(Collection Phases) CMS什么时候启动 CMS缺点 G ...
- 搞懂G1垃圾收集器
一.G1 GC术语Overview 1.1 并发 并发的意思是Java应用执行和垃圾收集活动可以同时进行 1.2 并行 并行的意思是垃圾收集运算是多线程执行的,比如CMS垃圾收集器的年轻代就是并行的, ...
- 关于生产环境改用G1垃圾收集器的思考
背景 由于我们的业务量非常大,响应延迟要求高.目前沿用的老的ParNew+CMS已经不能支撑业务的需求.平均一台机器在1个月内有1次秒级别的stop the world.对系统来说是个巨大的隐患.所以 ...
- 深入理解 Java G1 垃圾收集器--转
原文地址:http://blog.jobbole.com/109170/?utm_source=hao.jobbole.com&utm_medium=relatedArticle 本文首先简单 ...
- G1 垃圾收集器
概念先知 什么是垃圾回收 简单的说垃圾回收就是回收内存中不再使用的对象. 垃圾回收的基本步骤: 查找内存中不再使用的对象 释放这些对象占用的内存 查找内存中不再使用的对象 如何判断哪些对象不再被使用呢 ...
- 【JVM】7、深入理解Java G1垃圾收集器
本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...
- G1 垃圾收集器入门
最近在复习Java GC,因为G1比较新,JDK1.7才正式引入,比较艰难的找到一篇写的很棒的文章,粘过来mark下.总结这篇文章和其他的资料,G1可以基本稳定在0.5s到1s左右的延迟,但是并不能保 ...
- 转 G1垃圾收集器入门
转自:http://blog.csdn.net/zhanggang807/article/details/45956325 最近在复习Java GC,因为G1比较新,JDK1.7才正式引入,比较艰难的 ...
- G1垃圾收集器的实现原理
(G1垃圾收集器的实现原理.G1和CMS经常被单独拎出来问) https://tech.meituan.com/g1.html G1太复杂,说下CMS吧
随机推荐
- Python常见的异常
Python中常见的异常如表所示. exception的更多用法: 1.通常else 语句只有在没有异常的情况下才会被执行 try: aa = "异常测试:" print(aa)e ...
- Python机器学习基础教程
介绍 本系列教程基本就是搬运<Python机器学习基础教程>里面的实例. Github仓库 使用 jupyternote book 是一个很好的快速构建代码的选择,本系列教程都能在我的Gi ...
- PHP被忽略的基础知识
目录 下列PHP配置项中,哪一个和安全最不相关:() 字符串比较函数 格林时间 在PHP面向对象中,下面关于final修饰符描述错误的是( ) getdate()函数返回的值的数据类型是:( ) 关于 ...
- Python 编程入门
我喜欢直接了当, 这次主要是推荐蟒营大妈的 Python 入门课(https://py.101.camp), 还有不到一周就要开课了, 欢迎转发推荐~ 点击"夏日大作战:从小白到小能手的 P ...
- Python进阶:值传递,引用传递?不存在的,是赋值传递
Python的变量及其赋值 c/c++/c#/java 里面都有值传递,引用传递的概念,在Python中是如何的? 例 a = 1 b = a print(id(a),id(b)) #14072334 ...
- PAT(B) 1049 数列的片段和(C)规律
题目链接:1049 数列的片段和 (20 point(s)) 题目描述 给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段.例如,给定数列 { 0.1, 0.2, 0.3, 0.4 },我 ...
- 机器学习-HMM隐马尔可夫模型-笔记
HMM定义 1)隐马尔科夫模型 (HMM, Hidden Markov Model) 可用标注问题,在语音识别. NLP .生物信息.模式识别等领域被实践证明是有效的算法. 2)HMM 是关于时序的概 ...
- C语言下进制的使用
进制规则 十进制 以正常数字1-9开头,如123 八进制 以数字0开头,如0123 十六进制 以0x开头,如0X123 二进制 C语言不能直接书写二进制数 案例如下 int main() { int ...
- 【springcloud】1.微服务之springcloud-》eureka源码分析之请叫我灵魂画师。。。
- 手工给程序插入 ShellCode
PE格式是 Windows下最常用的可执行文件格式,理解PE文件格式不仅可以了解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,而有些技术必须建立在了解PE文件格式的基础上,如 ...