
垃圾回收器-G1
文章平均质量分 90
OkidoGreen
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
G1 GC技术解析
介绍G1 GC,全称Garbage-First Garbage Collector,通过-XX:+UseG1GC参数来启用。G1收集器是工作在堆内不同分区上的收集器,分区既可以是年轻代也可以是老年代,同一个代的分区不需要连续。并且每个代分区的数量是可以动态调整的。为老年代设置分区的目的是老年代里有的分区垃圾多,有的分区垃圾少,这样在回收的时候可以专注于收集垃圾多的分区,这也是G1名称的由来。不过这个算法并不适合新生代垃圾收集,因为新生代的垃圾收集算法是复制算法,但是新生代也使用了分区机制主要是因...转载 2021-01-07 16:48:56 · 1164 阅读 · 1 评论 -
G1 SATB和Incremental Update算法的理解
着色标记我们都知道cms gc 和g1 gc 的算法都是通过对gc root 进行遍历,并进行三颜色标记,具体标记算法如下:黑色(black):节点被遍历完成,而且子节点都遍历完成。 灰色(gray): 当前正在遍历的节点,而且子节点还没有遍历。 白色(white):还没有遍历到的节点,即灰色节点的子节点。并行gc 面对的共同问题我们都知道cmg gc 和g1 gc 都是和程序有并行执行的阶段。既然有并行,那就有可能在并行运行期间之前的标记过的对象的引用关系可能被改变,比如一个白色对象从被转载 2020-12-13 11:21:01 · 3445 阅读 · 0 评论 -
G1-Card Table和Remember Set
这两个数据结构是专门用来处理Old区到Young区的引用。Young区到Old区的引用则不需要单独处理,因为Young区中的对象本身变化比较大,没必要浪费空间去记录下来。RSet:全称Remembered Sets, 用来记录外部指向本Region的所有引用,每个Region维护一个RSet。 Card: JVM将内存划分成了固定大小的Card。这里可以类比物理内存上page的概念。下图展示的是RSet与Card的关系。每个Region被分成了多个Card,其中绿色部分的Card表示该Card中转载 2020-12-13 10:29:25 · 1515 阅读 · 0 评论 -
【重要】三色标记法与垃圾回收器(CMS、G1)
三色标记法-算法思想三色标记法将对象的颜色分为了黑、灰、白,三种颜色。黑色:该对象已经被标记过了,且该对象下的属性也全部都被标记过了。(程序所需要的对象) 灰色:该对象已经被标记过了,但该对象下的属性没有全被标记完。(GC需要从此对象中去寻找垃圾) 白色:该对象没有被标记过。(对象垃圾)算法流程:从我们main方法的根对象(JVM中称为GC Root)开始沿着他们的对象向下查找,用黑灰白的规则,标记出所有跟GC Root相连接的对象 扫描一遍结束后,一般需要进行一次短暂的STW(Stop转载 2020-09-14 19:58:11 · 1106 阅读 · 0 评论 -
CMS与G1 三色标记算法
承上启下jdk8默认回收器ps+po,jdk9默认就是G1了。但是CMS是并行回收的开始CMSCMS :ConcurrentMarkSweep 老年代 并发的,垃圾回收和应用程序同时运行,降低STW的时间(200MS)CMS有一些问题,所以没有任何版本默认是CMS的,只能手工指定。CMS是MarkSweep,必然会导致碎片,当碎片到一定程度,CMS老年代分配对象分配不下时,使用serialold进行老年代串行回收。会产生浮动垃圾解决方案:降低触发CMS的阈值,保持老年代有足够的转载 2020-09-14 19:57:07 · 2323 阅读 · 2 评论 -
G1垃圾收集器介绍
为解决CMS算法产生空间碎片和其它一系列的问题缺陷,HotSpot提供了另外一种垃圾回收策略,G1(Garbage First)算法,通过参数-XX:+UseG1GC来启用,该算法在JDK 7u4版本被正式推出,官网对此描述如下:The Garbage-First (G1) collector is a server-style garbage collector, targeted for multi-processor machines with large memories. It meets转载 2020-09-14 19:40:20 · 656 阅读 · 0 评论 -
G1-SATB、CMS-增量更新(文章记录)
https://blog.csdn.net/sai739295732/article/details/107358199https://blog.csdn.net/RaymondCoder/article/details/106078984https://blog.csdn.net/qq_36697880/article/details/1052063851.incremental updated -- 是红色的线,新增引用 A->D,关注引用的增加把A会重新标记成为灰色,下次重新扫.转载 2020-09-14 19:33:46 · 2102 阅读 · 0 评论 -
转:深入理解Java G1垃圾收集器
本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践。一,什么是垃圾回收首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么?简单的说垃圾回收就是回收内存中不再使用的对象。垃圾回收的基本步骤回收的步骤有2步:查找内存中不再使用的对象 释放这些对象占用的内存1,查找内存中不再使用的对象那么问题来了,如何判断哪些对象不再被使用呢?我们也有2个方法:引用计数法引用计数法就是如果一个对象没有被任何引用指向,则可转载 2020-09-13 09:46:37 · 873 阅读 · 0 评论 -
三色标记算法理论、漏标、SATB
G1收集概览:G1算法将堆划分为若干个区域(Region),它仍然属于分代收集器。不过,这些区域的一部分包含新生代,新生代的垃圾收集依然采用暂停所有应用线程的方式,将存活对象拷贝到老年代或者Survivor空间。老年代也分成很多区域,G1收集器通过将对象从一个区域复制到另外一个区域,完成了清理工作。这就意味着,在正常的处理过程中,G1完成了堆的压缩(至少是部分堆的压缩),这样也就不会有CMS内存碎片问题的存在了。Humongous区域:在G1中,还有一种特殊的区域,叫Humongous区域。如果转载 2020-09-13 09:44:14 · 2464 阅读 · 0 评论 -
go笔记-GC
GO “非分代的、非紧缩、写屏障、并发标记清理”并发清理: 垃圾回收(清理过程)与用户逻辑并发执行 三色并发标记 : 标记与用户逻辑并发执行一般常用垃圾回收方法引用计数这是最简单的一种垃圾回收算法,和之前提到的智能指针异曲同工。对每个对象维护一个 引用计数 ,当引用该对象的对象被销毁或更新时被引用对象的引用计数自动减一,当被引用对象被创建或被赋值给其他对象时引用计数自动加一。当引用计...转载 2019-06-21 18:25:02 · 1095 阅读 · 0 评论 -
对G1垃圾回收器的理解
https://blog.csdn.net/zhou2s_101216/article/details/792028931:了解G1G1的第一篇paper(附录1)发表于2004年,在2012年才在jdk1.7u4中可用。oracle官方计划在jdk9中将G1变成默认的垃圾收集器,以替代CMS。为何oracle要极力推荐G1呢,G1有哪些优点?首先,G1的设计原则就是简单可行的性能调优...转载 2019-06-21 17:25:47 · 2136 阅读 · 0 评论 -
G1垃圾收集器入门
G1垃圾收集器入门说明concurrent: 并发, 多个线程协同做同一件事情(有状态)parallel: 并行, 多个线程各做各的事情(互相间无共享状态)在GC领域: concurrent算法指GC线程和业务线程能并发执行; parallel指GC线程之间的并行。参考:What’s the difference between concurrency and paralle...转载 2019-06-21 10:36:46 · 962 阅读 · 0 评论 -
G1垃圾收集器(六) 之 命令行选项和最佳实践
命令行选项和最佳实践在这个章节,让我们一起看看G1的每个命令行选项。基本的命令行选项启用G1 GC,使用选项:-XX:+UseG1GC这是一个最简单的命令行,来启动下载的JDK自带的demos和例子中的Java2Demojava -Xmx50m -Xms50m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -jar c:\javademos\dem...转载 2019-06-20 23:27:16 · 1340 阅读 · 0 评论 -
G1 解决Evacuation Failure和Humongous Allocation
https://blog.csdn.net/u011381576/article/details/79755069希望您对G1有所了解。在jdk8中,我们很多会使用G1垃圾收集器,她是目前唯一跨越年轻代和年老代的垃圾收集器。里面有一个混合垃圾收集,可以清理全部的年轻代和部分年老代。G1里面东西还有很多,希望读者有一定的基础,下面我们来说说gc日志中常出现的两个组词:Evacuation ...转载 2019-06-20 23:25:39 · 2473 阅读 · 0 评论