在之前已经详细对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垃圾收集器设计目标与改良手段【纯理论】的更多相关文章

  1. 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 ...

  2. 搞懂G1垃圾收集器

    一.G1 GC术语Overview 1.1 并发 并发的意思是Java应用执行和垃圾收集活动可以同时进行 1.2 并行 并行的意思是垃圾收集运算是多线程执行的,比如CMS垃圾收集器的年轻代就是并行的, ...

  3. 关于生产环境改用G1垃圾收集器的思考

    背景 由于我们的业务量非常大,响应延迟要求高.目前沿用的老的ParNew+CMS已经不能支撑业务的需求.平均一台机器在1个月内有1次秒级别的stop the world.对系统来说是个巨大的隐患.所以 ...

  4. 深入理解 Java G1 垃圾收集器--转

    原文地址:http://blog.jobbole.com/109170/?utm_source=hao.jobbole.com&utm_medium=relatedArticle 本文首先简单 ...

  5. G1 垃圾收集器

    概念先知 什么是垃圾回收 简单的说垃圾回收就是回收内存中不再使用的对象. 垃圾回收的基本步骤: 查找内存中不再使用的对象 释放这些对象占用的内存 查找内存中不再使用的对象 如何判断哪些对象不再被使用呢 ...

  6. 【JVM】7、深入理解Java G1垃圾收集器

    本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...

  7. G1 垃圾收集器入门

    最近在复习Java GC,因为G1比较新,JDK1.7才正式引入,比较艰难的找到一篇写的很棒的文章,粘过来mark下.总结这篇文章和其他的资料,G1可以基本稳定在0.5s到1s左右的延迟,但是并不能保 ...

  8. 转 G1垃圾收集器入门

    转自:http://blog.csdn.net/zhanggang807/article/details/45956325 最近在复习Java GC,因为G1比较新,JDK1.7才正式引入,比较艰难的 ...

  9. G1垃圾收集器的实现原理

    (G1垃圾收集器的实现原理.G1和CMS经常被单独拎出来问) https://tech.meituan.com/g1.html G1太复杂,说下CMS吧

随机推荐

  1. linux如何查看mysql是否启动

    linux下有很多服务,今天就写一下如何查看服务是否启动,以mysql为例子 使用命令 # service mysqld status 或者 # service mysql status 命令来查看m ...

  2. RabbitMQ官方教程五 Topic(GOLANG语言实现)

    在上一教程中,我们改进了日志记录系统. 我们没有使用只能进行虚拟广播的fanout交换器,而是使用直接交换器,并有可能选择性地接收日志. 尽管使用直接交换改进了我们的系统,但它仍然存在局限性-它不能基 ...

  3. 【ARM-LInux开发】利用scp 远程上传下载文件/文件夹

    利用scp 远程上传下载文件/文件夹 scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o s ...

  4. 漏洞复现之Redis-rce

    通过主从复制 GetShell Redis主从复制 Redis是一个使用ANSI C编写的开源.支持网络.基于内存.可选持久性的键值对存储数据库.但如果当把数据存储在单个Redis的实例中,当读写体量 ...

  5. C++大数运算模板

    #include<iostream> #include<cstring> #include<cstdio> #include<iomanip> #inc ...

  6. GATK4注意事项

    近期在测试多样品的WES的过程中发现用HC得到gvcf之后,合并多个样品的gvcf文件的过程中,使用CombineGVCFs的过程中很慢,发现官网推荐使用GenomicsDBImport 用法如下: ...

  7. 032 Android智能下拉刷新框架-SmartRefreshLayout+RecyclerView的使用

    1.SmartRefreshLayout介绍 SmartRefreshLayout的目标是打造一个强大,稳定,成熟的下拉刷新框架,并集成各种的炫酷.多样.实用.美观的Header和Footer. 正如 ...

  8. php扩展安装方式

    目录 扩展安装 php源码编译安装 PEAR.PECL phpize 源码安装 扩展安装 以php安装swoole扩展为例. php源码编译安装 下载源码包并编译安装 $ wget http://cn ...

  9. 利用Python进行数据分析 第5章 pandas入门(1)

    pandas库,含有使数据清洗和分析工作变得更快更简单的数据结构和操作工具.pandas是基于NumPy数组构建. pandas常结合数值计算工具NumPy和SciPy.分析库statsmodels和 ...

  10. 组件上使用v-model

    组件上使用v-model <input v-model="searchText"> 等价于 <input v-bind:value="searchTex ...