首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JVM - G1收集器、Region、停顿时间模型、垃圾回收(建议收藏)

大家好,我是冰河~~ 今天,我们继续学习JVM相关的知识,今天给大家分享一篇关于G1收集器的文章,好了,不多说了,直接进入正题 Region 使用G1收集器时,java堆的内存会划分为多个大小相等的独立区域...停顿时间模型 G1的另外一个特点,就是建立可预测的停顿时间模型。...垃圾回收 新生代回收 上面提过,新生代的内存空间最多占用60%,当60%的空间用完的时候,就会触发新生代的回收。新生代的回收是用复制算法的,与之前不同的是,他会考虑到停顿时间。...前面三个阶段跟《JVM - CMS垃圾收集器(建议收藏)》的前面三个类似。 混合回收,是说他并不会仅仅回收老年代的垃圾,也会回收新生代的垃圾,他会根据停顿时间,尽可能多回收Region。...由于在停顿时间内回收的垃圾可能不会很多,所以这个阶段会进行多次的混合回收,默认是8次,可以通过-XX:G1MixedGCCountTarget设置。

96320

Android 内存优化】垃圾回收算法 ( 分代收集算法 | Serial 收集器 | ParNew 收集器 | Parallel Scavenge 收集器 | CMS 并发标记清除收集器 )

暂停用户线程 ; ④ 多线程执行 : 该垃圾回收器 多线程运行 , 消耗时间要比 Serial 串行垃圾回收器要短 ; ⑤ 与 Serial 垃圾回收器对比 : 该 GC 是并行的 , 是 Serial..., Parallel 垃圾回收器更关注吞吐量 ; ④ 吞吐量概念 : 吞吐量是 CPU 运行正常代码时间与总的消耗时间之间的比值 , CPU 运行的总时间是 程序运行时间 与 GC 垃圾收集的时间之和...短暂停顿 : 在 GC 线程运行时 , 用户线程仅做最短的停顿 , 在停顿过程中主要用于标记内存 ; 由于其停顿时间是各个 GC 算法中最短 , 该并发标记清除收集器又叫 并发低延迟收集器 ; 3....Android 垃圾收集器 : Android 中使用的是 CMS 垃圾回收器 , 会产生内存碎片 ; Android 中内存抖动产生 OOM , 就是因为使用的是 CMS 垃圾回收器 ( 收集器 )...; Android 之所以采用标记-清除算法进行垃圾回收 , 是因为这种算法效率很高 , 性能对于嵌入式小型设备来说 , 非常重要 ; 大型服务器可以采用一些复杂的垃圾回收算法 , 如标记-压缩算法 ,

91810
您找到你想要的搜索结果了吗?
是的
没有找到

系统分析垃圾收集器

由于压缩空间需要一定的时间,会影响垃圾收集的时间。通常用在老年代,这也是老年代耗时多的原因之一。...这样会更耗费时间。 二、分代收集理论 GC分代的基本假设:绝大部分对象的生命周期都非常短暂,存活时间短。...CMS等垃圾收集器的关注点更多的是用户线程的停顿时间(提高用户体验)。 什么是吞吐量呢? 就是CPU中用于运行用户代码的时间与CPU总消耗时间的比值。...即: Parallel Scavenge收集器提供两个参数控制垃圾回收的执行: -XX:MaxGCPauseMillis,最大垃圾回收停顿时间。...这个参数的原理是空间换时间收集器会控制新生代的区域大小,从而尽可能保证回收少于这个最大停顿时间。简单的说就是回收的区域越小,那么耗费时间也越小。 所以这个参数并不是设置得越小越好。

43030

【JVM进阶之路】七:垃圾收集器盘点

和ParNew有些类似,但Parallel Scavenge主要关注的是垃圾收集的吞吐量。 所谓吞吐量指的是运行用户代码的时间与处理器总消耗时间的比值。...image.png Parallel Scavenge收集器提供了两个参数用于精确控制吞吐量: -XX:MaxGCPauseMillis,最大垃圾回收停顿时间。...这个参数的原理是空间换时间收集器会控制新生代的区域大小,从而尽可能保证回收少于这个最大停顿时间。简单的说就是回收的区域越小,那么耗费时间也越小。 所以这个参数并不是设置得越小越好。...-XX:GCTimeRatio,垃圾收集时间与总时间占比。这个是吞吐量的倒数,原理和MaxGCPauseMillis相同。...如果浮动垃圾太多,会触发新的垃圾回收,导致性能降低。

42220

一文了解JVM全部垃圾回收器,从Serial到ZGC

Parallel Scavenge收集器提供两个参数控制垃圾回收的执行: -XX:MaxGCPauseMillis,最大垃圾回收停顿时间。...这个参数的原理是空间换时间收集器会控制新生代的区域大小,从而尽可能保证回收少于这个最大停顿时间。简单的说就是回收的区域越小,那么耗费时间也越小。 所以这个参数并不是设置得越小越好。...CMS收集器 CMS,Concurrent Mark Sweep,同样是老年代的收集器。它关注的是垃圾回收最短的停顿时间(低停顿),在老年代并不频繁GC的场景下,是比较适用的。...由于最耗费时间的并发标记与并发清除阶段都不需要暂停工作,所以整体的回收是低停顿的。...它是一款低停顿高并发的收集器。 ZGC几乎在所有地方并发执行的,除了初始标记的是STW的。所以停顿时间几乎就耗费在初始标记上,这部分的实际是非常少的。那么其他阶段是怎么做到可以并发执行的呢?

51920

垃圾收集器

图1-20 Serial/Serial Old垃圾收集器运行过程 这里埋下了一个伏笔,越优秀的收集器,他的停顿时间一定越短,这也是所有收集器共同追求的目标。...所谓吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值,即吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间),例:虚拟机运行100分钟,其中垃圾收集时间用了1分钟,那吞吐量就是99%...因为G1把堆分成多个区域,因此在发生GC时,影响的范围就不会太多,他是要判断哪个区域垃圾数量多才会优先回收哪个Regioin的,这样的回收效益是最大的。因为各个区域都存在对象。...1.5.8 ZGC收集器 ZGC是一款在JDK 11中新加入的具有实验性质的低延迟垃圾收集器,是由Oracle公司研发的,承诺在数TB的堆上具有非常低的暂停时间。...此选项从根本上决定了应该给GC多少CPU时间。给它太多,GC将占用应用程序太多的CPU时间。给它太少,应用程序分配垃圾的速度可能比GC收集垃圾的速度快。

36810

JVM-06垃圾收集Garbage Collection(下)【垃圾收集器

---- ParNew收集器 ParNew收集器是Serial收集器新生代的多线程实现,注意在进行垃圾回收的时候依然会stop the world,只是相比较Serial收集器而言它会运行多条进程进行垃圾回收...所谓吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值,即吞吐量=运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间)。...停顿时间越短就越适合需要与用户交互的程序,良好的响应速度能够提升用户的体验;而高吞吐量则可以最高效率地利用CPU时间,尽快地完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务。...initial mark) 并发标记(concurrent mark) 重新标记(remark) 并发清除(concurrent sweep) 注意初始标记和重新标记还是会stop the world,但是在耗费时间更长的并发标记和并发清除两个阶段都可以和用户进程同时工作...可预测的非停顿:这是G1相对于CMS的另一大优势,降低停顿时间是G1和CMS共同的关注点,能让使用者明确指定在一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒。

23610

JVM调优之垃圾定位、垃圾回收算法、垃圾处理器对比

所谓吞吐量就是处理器用于运行用户代码的时间与处理器总消耗时间的比值,即: 吞吐量=运行用户代码时间运行用户代码时间+运行垃圾收集器时间吞吐量=运行用户代码时间运行用户代码时间+运行垃圾收集器时间 如果虚拟机完成某个任务...,用户代码加上垃圾收集总共耗费了100分钟,其中垃圾收集花掉1分钟,那吞吐量就是99%。...停顿时间越短就越适合需要与用户交互或需要保证服务响应质量的程序,良好的响应速度能提升用户体验;而高吞吐量则可以最高效率地利用处理器资源,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的分析任务...更具体的处理思路是让G1收集器去跟踪各个Region里面的垃圾堆积的“价值”大小,价值即回收所获得的空间大小以及回收所需时间的经验值,然后在后台维护一个优先级列表,每次根据用户设定允许的收集停顿时间(使用参数...这种使用Region划分内存空间,以及具有优先级的区域回收方式,保证了G1收集器在有限的时间内获取尽可能高的收集效率。 垃圾处理器总结 目前是新生代老年代垃圾回收器组合方式: ?

53530

带你走近Java虚拟机到底有哪些经典的垃圾收集器

但是与其它收集器不同的是它关注的点不一样,Parallel Scavenge收集器关注的是能否达到一个可控制的吞吐量,而CMS等收集器关注的是垃圾收集过程中用户线程暂停的时间。...吞吐量:处理器用于运行用户代码的时间与处理器总消耗时间的比值 image.png 主要特点 主要是用场景是适合在后台运算而不需要太多交互的分析任务,由于该收集器关注吞吐量所以又被称为吞吐量优先收集器...精确控制吞吐量的参数 -XX:MaxGCPauseMillis 控制最大垃圾收集停顿时间 -XX:GCTimeRatio 设置吞吐量的大小 Serial Old收集器 - 老年代 Serial收集器的老年代版本...推出了一款在强交互应用中几乎可称为具有划时代意义 的垃圾收集器——CMS 收集器;首次实现了让垃圾收集线程与用户线程(基本上)同时工作 主要特点: 采用的是标记-清除算法 以获取最短回收停顿时间为目标的垃圾收集器...:内存占用``吞吐量``延迟 低延迟的垃圾收集器 Shenandoah收集器 主要特点: Shenandoah收集器摒弃了在G1中耗费大量内存和计算资源去维护的记忆集,改用名为连接矩阵的全局数据结构来记录跨

7910

G1垃圾收集器详解(1)

概述 G1(Garbage First)垃圾收集器是当今垃圾回收技术最前沿的成果之一。早在JDK7就已加入JVM的收集器大家庭中,成为HotSpot重点发展的垃圾回收技术。...串行收集器是最基本、发展时间最长、久经考验的垃圾收集器,也是客户端模式下的默认收集器配置。 串行收集器采用单线程stop-the-world的方式进行收集。...G1垃圾收集器也是以关注延迟为目标、服务器端应用的垃圾收集器,被HotSpot团队寄予取代CMS的使命,也是一个非常具有调优潜力的垃圾收集器。...当发生年轻代收集或混合收集时,通过计算GC与应用的耗费时间比,自动调整堆空间大小。...如果GC频率太高,则通过增加堆尺寸,来减少GC频率,相应地GC占用的时间也随之降低;目标参数-XX:GCTimeRatio即为GC与应用的耗费时间比,G1默认为9,而CMS默认为99,因为CMS的设计原则是耗费

82721

Stop The World 是何时发生的?

GC ROOT的引用链分析一遍,感觉耗费时间很长啊,有没有可能减少每次扫描的GC ROOT?」...参考自《深入理解Java虚拟机》 垃圾收集器 图中展示了七种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用。...,多线程,主要关注吞吐量」 吞吐量=运行用户代码时间/(运行用户代码时间+运行垃圾收集时间) Serial Old收集器 「老年代,标记-整理算法,单线程,是Serial收集器的老年代版本」 用处有如下...Server级别多CPU机器上的默认GC方式,主要适合后台运算不需要太多交互的任务 ---- 收集器 收集对象和算法 收集器类型 说明 适用场景 Serial Old 老年代,标记整理算法 单线程...在注重吞吐量以及CPU资源敏感的场合采用 CMS 老年代,标记清除算法 并行与并发收集器 尽可能的缩短垃圾收集时用户线程停止时间;缺点在于,1.内存碎片,2.需要更多CPU资源,3.浮动垃圾问题,需要更大的堆空间

70520

JVM:垃圾收集器

ParNew收集器除了支持多线程之外,其他与Serial收集器相比并没有太多创新之处,但它却是不少运行在服务端模式下的HotSpot虚拟机,尤其是JDK7之前的遗留系统中首选的新生代收集器。...所谓的吞吐量就是处理器用于运行用户代码的时间与处理器总耗时时间的比值,即: 吞吐量 = 运行用户代码时间/(运行用户代码时间+运行垃圾收集时间) ?...如果虚拟机完成某个人物,用户代码加上垃圾收集总共耗费了100分钟,其中垃圾收集时间花掉1分钟,那吞吐量就是99%。...停顿时间越短就越适合需要与用户交互或需要保证服务响应质量的程序,良好的响应速度能提升用户体验;而高吞吐量则可以最高效率地利用处理器资源,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的分析任务...根据经验,G1至少要耗费大约相当于Java堆容量10%至少20%的额外内存来维护收集器工作。 譬如,在并发标记阶段如何保证收集线程与用户线程互不干扰地运行?

31621

jvm之7种垃圾回收器解读(上)

高吞吐量则可以高效率地利用CPU时间,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务。因此,常见在服务器环境中使用。例如,那些执行批量处理、订单处理、工资支付、科学计算的应用程序。...● -XX:MaxGCPauseMillis 设置垃圾收集器最大停顿时间(即STw的时间)。单位是毫秒。...CMS收集器的关注点是尽可能缩短垃圾收集时用户线程的停顿时间。停顿时间越短(低延迟)就越适合与用户交互的程序,良好的响应速度能提升用户体验。...,不过暂停时间并不会太长,因此可以说明目前所有的垃圾收集器都做不到完全不需要“stop-the-World”,只是尽可能地缩短暂停时间。...由于最耗费时间的并发标记与并发清除阶段都不需要暂停工作,所以整体的回收是低停顿的。 另外,由于在垃圾收集阶段用户线程没有中断,所以在CMS回收过程中,还应该确保应用程序用户线程有足够的内存可用。

15030

Java垃圾收集器总结

,只要不频繁发生收集,并且停顿用户可以接受,那么Serial是很好的选择,比如: 用户桌面应用 小型的微服务应用 ParNew收集器 新生代收集器;实质上是Serial的多线程并行版本; 虽然该收集器没有太多创新...; CMS等收集器关注的是尽可能缩减垃圾收集时用户线程的停顿时间; 而 Parallel Scavenge关注的是达到一个可控制的吞吐量 吞吐量 = 运行用户代码时间 / (用户代码执行时间+垃圾收集时间...高吞吐量则可以高效的利用服务器资源,尽快的完成程序的运算任务,适合在后台运算而不需要太多交互的分析任务 Parallel Scavenge的特性: 吞吐量优先收集器 垃圾收集的自适应调节(开启-XX:...基于"停顿时间模型"收集器 目的: 关注停顿时间,可控制的停顿时间 G1开创了基于Region的堆内存分布模型;维护了一个优先级的回收队列....将Region中存活的对象复制到空的Region中,再清理到旧的Region空间.涉及对象移动,必须暂停用户线程, 由多条收集器线程并行完成 G1与CMS 因为G1和CMS都是比较关注停顿时间垃圾收集器

41200

常用新生代垃圾收集器

常用新生代垃圾收集器 TOC Serial垃圾收集器 Serial是单线程垃圾回收器,当需要执行垃圾回收时,程序会暂停一切工作,然后单线程执行垃圾回收....应用场景 是HotSpot在Client模式下默认的新生代垃圾收集器 在用户的桌面应用场景中,可用内存一般不大(几十M至一两百M),可以在较短时间内完成垃圾收集(几十MS至一百多MS),只要不频繁发生,...Parallel scavenge是一个新生代垃圾收集器,它是用复制算法的垃圾收集器,又是多线程并行的垃圾收集器,和ParNew类似.吞吐量优先的垃圾收集器,是Java1.8默认的新生代垃圾收集器....主要特点 Parallel scavenge收集器的目标是达到一个可控的吞吐量,(吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)) 使用场景 Parallel scavenge收集器的高吞吐量可以最高效率的利用...CPU,尽快的完成程序的运算任务,主要适合后台运算而不是太多交互的任务(太多交互的任务,适合用响应时间优先的CMS垃圾收集器) Parallel scavenge可以精确控制吞吐量,通过两个参数:控制最大垃圾收集停顿时间

67000

JVM 七种垃圾收集器

Java 垃圾收集器垃圾收集算法的具体实现。 下图展示的是 7 种作用于不同分代的收集器,如果两种收集器之前有连接,表示它们可以配合使用。...下图是 Serial 收集器的运行过程。 ? ParNew 收集器 ParNew 收集器是 Serial 收集器的多线程版本。除了使用多线程收集,其他与 Serial 收集相比并无太多创新之处。...吞吐量 = 运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间) 高吞吐量可以高效率地利用 CPU 时间,尽快完成程序地运行任务,适合在后台运行不需要太多交互的任务。...-XX:MaxGCPauseMillis : 设置最大垃圾收集停顿时间。 Serial Old 收集器 Serial 收集器的老年代产品。同样是单线程,使用标记整理算法。 ?...G1 跟踪各个 Region 里面的垃圾堆积的价值大小(回收所获得的空间大小以及回收所需时间的经验值),在后台维护一个优先列表,每次根据允许的收集时间,优先回收价值最大的 Region。

66140

Android 内存优化】内存抖动 ( 垃圾回收算法总结 | 分代收集算法补充 | 内存抖动排查 | 内存抖动操作 | 集合选择 )

标记压缩算法 ) 介绍了 标记清除算法 , 复制算法 , 标记压缩算法 , 三种垃圾回收算法 ; 【Android 内存优化】垃圾回收算法 ( 分代收集算法 | Serial 收集器 | ParNew...收集器 | Parallel Scavenge 收集器 | CMS 并发标记清除收集器 ) 博客中介绍了分代收集算法 , 并对常用的垃圾收集器进行了介绍 , 下面总结一下垃圾回收算法 , 与垃圾收集器...( 重点 ) : 老年代 , 标记-清除算法 , 多线程 GC , 与用户线程并发 ( 短时间暂停 ) ; ⑤ Parallel Old 收集器 : 老年代 , 标记整理算法 , 多线程 GC , 暂停用户线程...; ⑥ Serial Old 收集器 : 老年代 , 标记整理算法 , 单线程 GC , 暂停用户线程 ; 二、 分代收集算法补充 ---- 【Android 内存优化】垃圾回收算法 ( 分代收集算法...老年代内存策略 : 标记整理算法 ; Android 中使用的是 CMS 垃圾收集器 ; 三、 查看 Java 虚拟机 ---- 查看 Java 虚拟机 : 在命令行中执行 java -version

61530

JVM-垃圾回收器概述

高吞吐量则可以高效率地利用CPU时间,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务。因此,常见在服务器环境中使用。例如,那些执行批量处理、订单处理、工资支付、科学计算的应用程序。...CMS收集器的关注点是尽可能缩短垃圾收集时用户线程的停顿时间。停顿时间越短(低延迟)就越适合与用户交互的程序,良好的响应速度能提升用户体验。...,不过暂停时间并不会太长,因此可以说明目前所有的垃圾收集器都做不到完全不需要“stop-the-World”,只是尽可能地缩短暂停时间。...由于最耗费时间的并发标记与并发清除阶段都不需要暂停工作,所以整体的回收是低停顿的。 另外,由于在垃圾收集阶段用户线程没有中断,所以在CMS回收过程中,还应该确保应用程序用户线程有足够的内存可用。...G1(Garbage-First)是一款面向服务端应用的垃圾收集器,主要针对配备多核CPU及大容量内存的机器,以极高概率满足GC停顿时间的同时,还兼具高吞吐量的性能特征。

18330

JVM 学习笔记(五)

有以下缺点: 标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另 一次垃圾收集动作。...(1)标记和清除两个过程都比较耗时,效率不高 (2)会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。...适用于相对时间有要求的场景,比如Web 。 理解吞吐量和停顿时间:   停顿时间->垃圾收集器 进行 垃圾回收终端应用执行响应的时间。   ...吞吐量->运行用户代码时间/(运行用户代码时间+垃圾收集时间) 。   ...停顿时间越短就越适合需要和用户交互的程序,良好的响应速度能提升用户体验;高吞吐量则可以高效地利用CPU时间,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务。

36520
领券