G1垃圾收集器的优点和缺点
一 G1垃圾收集器的优点
1 并行与并发
2 分代收集
- 从分代上看,G1 依然属于分代型垃圾回收器,它会区分年轻代和老年代,年轻代依然有 Eden 区和 Survivor 区。但从堆的结构上看,它不要求整个 Eden 区、年轻代或者老年代都是连续的,也不再坚持固定大小和固定数量。
- 将堆空间分为若干个区域(Region),这些区域中包含了逻辑上的年轻代和老年代。
- 和之前的各类回收器不同,它同时兼顾年轻代和老年代。对比其他回收器,或者工作在年轻代,或者工作在老年代。
G1 所谓的分代,已经不是下面这样的了
而是这样的一个区域
3 空间整合
- CMS:使用的是“标记-清除”算法、存在内存碎片、若干次 GC 后进行一次碎片整理。
- G1 将内存划分为一个个的 region。内存的回收是以 region 作为基本单位的。Region之间是复制算法,但整体上实际可看作是标记-压缩(Mark-Compact)算法,两种算法都可以避免内存碎片。这种特性有利于程序长时间运行,分配大对象时不会因为无法找到连续内存空间而提前触发下一次 GC。尤其是当 Java 堆非常大的时候,G1 的优势更加明显。
4 可预测的停顿时间模型(即:软实时 soft real-time)
- 由于分区的原因,G1 可以只选取部分区域进行内存回收,这样缩小了回收的范围,因此对于全局停顿情况的发生也能得到较好的控制。
- G1 跟踪各个 Region 里面的垃圾堆积的价值大小(回收所获得的空间大小以及回收所需时间的经验值),在后台维护一个优先列表,每次根据允许的收集时间,优先回收价值最大的Region。保证了 G1 收集器在有限的时间内可以获取尽可能高的收集效率。
- 相比于 CMS GC,G1 未必能做到 CMS 在最好情况下的延时停顿,但是最差情况要好很多。
二 G1垃圾收集器的缺点
G1垃圾收集器的优点和缺点相关推荐
- 简单理解CMS与G1垃圾收集器
随着垃圾收集器不断的完善,中间产生了多种垃圾收集器,从最早的Serial收集器到现在的ZGC,Shenandoah GC收集器.这些垃圾收集器其最终的目的是为了能够缩短STW(Stop the Wor ...
- 转:深入理解Java G1垃圾收集器
本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...
- 深入理解 Java G1 垃圾收集器--转
原文地址:http://blog.jobbole.com/109170/?utm_source=hao.jobbole.com&utm_medium=relatedArticle 本文首先简单 ...
- 深入理解 Java G1 垃圾收集器
本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...
- G1 垃圾收集器原理详解
一.G1 垃圾收集器的开发背景: 1.CMS 垃圾收集器的缺陷: JVM 团队设计出 G1 收集器的目的就是取代 CMS 收集器,因为 CMS 收集器在很多场景下存在诸多问题,缺陷暴露无遗,具体如下: ...
- GC之G1垃圾收集器
GC之G1垃圾收集器 目录 以前收集器的特点 G1是什么 G1特点 G1底层原理 G1回收步骤 和CMS相比的优势 小总结 1. 以前收集器的特点 年轻代和老年代是各自独立且连续的内存块 年轻代收集必 ...
- JVM性能调优实践:G1 垃圾收集器介绍篇
前言 前面两篇主要整理了性能测试的主要观察指标信息:性能测试篇,以及JVM性能调优的工具:JVM篇.这一篇先简单总结一下GC的种类,然后侧重总结下G1(Garbage-First)垃圾收集器的分代,结 ...
- 深入理解 Java G1 垃圾收集器GC调优
本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...
- G1垃圾收集器设计目标与改良手段【纯理论】
在之前已经详细对CMS垃圾回收器进行了学习,今天准备要学习另一个全新的垃圾收集器---G1(Garbage First Collector 垃圾优先的收集器),说是一种全新的,其实G1垃圾收集器已经出 ...
最新文章
- 今天,向 6 女性程序员先驱致敬
- Stream Processing:滑动窗口的聚集(aggregation)操作的优化算法讲解
- AI让硬件说话,这就是未来物联网
- myeclispse配置自己的jdk和tomcat
- 编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码
- 【已解决】TypeError: ‘<‘ not supported between instances of ‘str‘ and ‘int‘_Python系列学习笔记
- 电脑连接电视方法详解_电脑如何连网?——校园宽带的连接方法(详解版)
- 日期时间格式之间的相互转换
- 华为透露中国首个开源基金会将于近期正式运营!
- Python中的分片和索引方法
- SpringMvc 文件上传后台处理
- Nginx打包RPM(FPM工具)
- ps无法加载扩展未经正确签署解决方法
- MySQL2:代码小节和代码测试
- uefiboot 文件_UEFI下win系统启动过程及用bcdboot命令如何修复引导启动
- arduino简易电子琴
- 大话functional编程语言
- Computer composition and design work04 ——fifth verson
- MFC简易RTF编辑器
- aosp_015.配置编译文件,删除自带app
热门文章
- 线刷一加5t android 9,11万条评价0差评,一加5T为什么这么牛?
- vue H5、uniapp小程序的文件下载
- c++中list、vector、map 、set区别
- 数据分析中如何清洗数据?
- 带你了解STM32中断系统
- [oeasy]python0128_unicode_字符集_character_set_八卦_星座
- SSE和WebSocket
- Android所有小部件列表页面,伟大的Android时钟小部件列表,以帮助您了解时间 | MOS86...
- 2021年P气瓶充装考试试卷及P气瓶充装模拟考试题库
- java+cas实现类_像宝石一样的Java原子类-基于CAS实现