在之前已经详细对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. web端自动化——unittest框架编写web测试用例

    1.前言: 对于初学者来说,python自带的IDLE,精简又方便,不过一个好的编辑器能让python编码变得更方便,更加优美些. 不过呢,也可以自己去下载其他更好用的代码编辑器,在这推荐: PyCh ...

  2. python 多线程模板简单实现

    #-*- encoding: UTF-8 -*- #编码声明 import threading,Queue,os import time #导入方法模块 def main(inargs): work_ ...

  3. 【GStreamer开发】GStreamer基础教程03——动态pipeline

    本教程介绍pipeline的一种新的创建方式--在运行中创建,而不是在运行前一次性的创建结束. 介绍 在这篇教程里的pipeline并非在运行前就全部创建结束的.放松一下,这样做没有任何问题.如果我们 ...

  4. ubuntu18.04 阿里镜像源

    备份:cp /etc/apt/sources.list /etc/apt/sources.list.bak 清空source.list:echo > /etc/apt/sources.list ...

  5. Guava 工具类之Cache的使用

    一.guava cache 介绍 1.介绍 guava cache是Google guava中提供的一款轻量级的本地缓存组件,其特点是简单.轻便.完善.扩展性强,内存管理机制也相对完善. 2.使用缓存 ...

  6. windows密码凭据

  7. PAT(B) 1069 微博转发抽奖(Java)

    题目链接:1069 微博转发抽奖 (20 point(s)) 题目描述 小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包.请你编写程序帮助他确 ...

  8. AJAX个人草稿

    /*var CUSTOMS_SEX=arr[2]; var CUSTOMS_TELEPHONE=arr[6]; mui.openWindow({ url:'userinfol.html', id:'u ...

  9. python中zipfile模块实例化解析

    文章内容由--“脚本之家“--提供,在此感谢脚本之家的贡献,该网站网址为:https://www.jb51.net/ 简介: zipfile是python里用来做zip格式编码的压缩和解压缩的,由于是 ...

  10. javascript之instanceof

    定义和用法 instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上. 语法: object instanceof construct ...