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

HotSpot垃圾收集器1 Serial垃圾收集器2 ParNew垃圾收集器3 Parallel Scavenge垃圾收集器老年代垃圾收集器1 Serial Old垃圾收集器2 Parallel Ol

HotSpot虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,没有最好的垃圾收集器,只有最适合的垃圾收集器 根据新生代和老年代各自的特点,我们应该分别为它们选择不同的收集器,以提升垃圾回收效率....1 Serial垃圾收集器 ?...或GCTimeRadio 老年代垃圾收集器 1 Serial Old垃圾收集器 Serial的老年代版本,都是单线程收集器,GC时只启动一条GC线程,因此都适合客户端应用...."算法.因此,由于在GC过程中没有使垃圾收集和用户线程并行执行,因此它们是追求吞吐量的垃圾收集器. ?...G1收集器(Garbage-First) G1是当今最前沿的垃圾收集器成果之一.

91680

垃圾收集器

,还有目前广泛使用的,如图1-19所示就是7个经典的垃圾收集器,其中G1是目前应用最为广泛的,还有一些是JDK8以上支持的垃圾收集器,图中并未展示,后面小结中会提到。...图 1-19 HotSpot中经典垃圾收集器 1.5.1 Serial收集器 这个收集器是最基本的,也是历史最悠久的收集器,目前基本不会用了,想当年也是新生代的唯一选择,但是这么多年过去了,HotSpot...图1-20所示Serial/Serial Old垃圾收集器运行过程。 ?...图1-20 Serial/Serial Old垃圾收集器运行过程 这里埋下了一个伏笔,越优秀的收集器,他的停顿时间一定越短,这也是所有收集器共同追求的目标。...CMS是基于标记-清除算法的,因为过程中有并发标记阶段因此可以叫做并发标记清理收集器,并发标记清理收集器也称为并发低停顿收集器或低延迟垃圾收集器。他的宗旨是:低停顿。

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

JVM 垃圾收集器

本文“垃圾收集器”节选自《深入理解Java虚拟机:JVM高级特性与最佳实践》【作者:周志明】 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。...Java 虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器...这个收集器是一个单线程的收集器,只会使用一个CPU 或一条收集线程去完成垃圾收集工作。重要的是,它在进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。...(2) CMS 收集器无法处理浮动垃圾 CMS 收集器无法处理浮动垃圾,可能出现 Concurrent Mode Failure 失败而导致另一次 Full GC 的产生。...这一部分垃圾就称为 浮动垃圾

28020

垃圾收集器总结

垃圾收集器总结 常用垃圾收集器对比 垃圾收集器 串行/并行/并发 新生代/老年代 算法 目标 适用场景 Serial 串行 新生代 复制 低延迟优先 单 CPU 环境下的 Client 模式 Serial...Server 模式与 CMS 配合使用 CMS 并发 老年代 标记-清除 低延迟优先 内存不大的 Java 应用 G1 并发 both 标记-整理+复制 低延迟优先 大内存的 Java 应用 常用垃圾收集器组合...Serial + Serial Old:实现单线程的低延迟垃圾回收机制 Parallel Scavenge + Parallel Old:实现多线程的高吞吐垃圾回收机制 ParNew + CMS:实现多线程的低延迟垃圾回收机制...G1:实现大内存 Java 应用的低延迟垃圾回收机制 如何选择垃圾收集器 吞吐量优先 or 低延迟优先 吞吐量优先 目标是充分利用多核 CPU 资源,让 CPU 尽可能多地处理业务,可以选择 Parallel...G1 -> ZGC ZGC 号称无停顿垃圾收集器,这又是一次极大的改进。 ZGC 和 G1 有一些相似的地方,但是底层的算法和思想又有了全新的突破。

31110

HotSpot 垃圾收集器

HotSpot 垃圾收集器HotSpot 虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,虽然我们要对各个收集器进行比较,但并非为了挑选出一个最好的收集器。...我们选择的只是对具体应用最合适的收集器。新生代垃圾收集器Serial 垃圾收集器(单线程)只开启一条 GC 线程进行垃圾回收,并且在垃圾收集过程中停止一切用户线程,即 Stop The World。...老年代垃圾收集器Serial Old 垃圾收集器(单线程)Serial Old 收集器是 Serial 的老年代版本,都是单线程收集器,只启用一条 GC 线程,都适合客户端应用。...CMS 垃圾收集器CMS(Concurrent Mark Sweep,并发标记清除)收集器是以获取最短回收停顿时间为目标的收集器(追求低停顿),它在垃圾收集时使得用户线程和 GC 线程并发执行,因此在垃圾收集过程中用户也不会感到明显的卡顿...G1 通用垃圾收集器G1 是一款面向服务端应用的垃圾收集器,它没有新生代和老年代的概念,而是将堆划分为一块块独立的 Region。

12810

Java垃圾收集器

GC(垃圾收集器)算是Java语言的一大特色,不同于C/C++要我们手动释放内存,GC能够帮我们回收90%以上的“垃圾”。下面就来介绍一下垃圾收集器。 1. Java中如何定义一个“垃圾” 2....什么是“垃圾收集器 3. 如何收集“垃圾” 4. 线程“垃圾”和非线程“垃圾” 5. 弱引用和软引用 1.Java中如何定义一个“垃圾” ---- 所谓垃圾,就是内存中不再有用的对象。...2.什么是“垃圾收集器 ---- 垃圾收集器其实就是一个后台守护进程,在内存充足的情况下,它的优先级很低,一般不出来运行,当内存中有很多垃圾时,它的优先级就会变高,并出来清理垃圾,正因为如此,垃圾收集器的运行时间是没有保障的...就是当垃圾收集器要回收垃圾对象之前,调用finalize()方法,如果没有回收成功,那么第二次垃圾收集器回收这个垃圾对象,就不再调用它的finalize()方法,而是直接回收。...这时可以使用软引用—–java.lang.ref.SoftReference,软引用指向的对象在内存没有被耗尽的情况下不会被垃圾收集器回收,具体规则如下: 在内存耗尽之前,垃圾收集器会尝试释放软引用所指向的对象

48320

HotSpot 垃圾收集器

---- HotSpot 虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,虽然我们要对各个收集器进行比较,但并非为了挑选出一个最好的收集器。我们选择的只是对具体应用最合适的收集器。...新生代垃圾收集器 Serial 垃圾收集器(单线程) 只开启一条 GC 线程进行垃圾回收,并且在垃圾收集过程中停止一切用户线程(Stop The World)。...Parallel Scavenge 垃圾收集器(多线程) Parallel Scavenge 和 ParNew 一样,都是多线程、新生代垃圾收集器。...老年代垃圾收集器 Serial Old 垃圾收集器(单线程) Serial Old 收集器是 Serial 的老年代版本,都是单线程收集器,只启用一条 GC 线程,都适合客户端应用。...CMS 垃圾收集器 CMS(Concurrent Mark Sweep,并发标记清除)收集器是以获取最短回收停顿时间为目标的收集器(追求低停顿),它在垃圾收集时使得用户线程和 GC 线程并发执行,因此在垃圾收集过程中用户也不会感到明显的卡顿

41160

CMS垃圾收集器

CMS垃圾收集器收集详细步骤 初始标记(Stop the world) 并发标记 预清理 可被终止的预清理 重新标记(Stop the world) 并发清除 并发重置 初始标记 标记GcRoots直接可达老年对象...并发重置 CMS垃圾收集器参数回到初始状态,为下一次垃圾收集做准备。...使用CMS垃圾收集器要注意的问题 重新标记停顿时间过长 80%的时间花在重新标志阶段,如果发现重新标志阶段停顿时间过长,可尝试添加-XX:+CMSScavengeBeforeRemark,在重新标志之前做一次...gc线程正在标记存活对象,用户线程同时向老年代提升新的对象,清理工作还没有开始,old gen已经没有空间容纳更多对象了,这时候就会导致concurrent mode failure, 然后就会使用串行收集器回收老年代的垃圾...JDK1.7,JDK1.8设置CMS垃圾收集器XX:+UseConcMarkSweepGC 几个重要的CMS参数 -XX:CMSFullGCsBeforeCompaction=n Full GC n 次后进行内存压缩整理

26400

JVM 垃圾收集器

一、什么是垃圾收集器 GC算法(引用计数/复制/标清/标整)是内存回收的方法论,垃圾收集器就是算法落地实现。...二、4种主要垃圾收集器 串行垃圾回收器(Serial) 它为单线程环境设计且只使用一个线程进行垃圾回收,会暂停所有的用户线程。所以不适合服务器环境。...:设定CMS的线程数量 -XX:+UseG1GC:启用G1垃圾回收器 五、如何选择垃圾收集器 组合的选择: 1.单CPU或小内存,单机程序 -XX:+UseSerialGC 2.多CPU,需要最大吞吐量...六、G1垃圾收集器 1、是什么 G1(Garbage-First)收集器,是一款面向服务端应用的收集器,应用在多处理器和大容量内存环境中,在实现高吞吐量的同时,尽可能的满足垃圾收集暂停时间的要求。...该收集器是把整个堆(新生代、老生代)划分成多个固定大小的区域,每次根据允许停顿时间去手机垃圾最多的区域。

41230

JVM:垃圾收集器

经典垃圾收集器 如果说收集算法是内存回收的方法论,那垃圾收集器就是内存回收的实践者。...《Java虚拟机规范》中对垃圾收集器应该如何实现并没有做出任何规定,因此不同厂商、不同版本的虚拟机所包含的垃圾收集器都可能会有很大差别,不同的虚拟机一般也都会提供各种参数供用户根据自己的应用特点和要求组合出各个内存分代所使用的收集器...大家只看名字就应该能够猜到,这个收集器是一个单线程工作的收集器,但它的“单线程”的意义并不仅仅是说明它只会使用一个处理器或一条收集线程去完成垃圾收集工作,更重要的是强调在它进行垃圾收集时,必须暂停其他所有的工作线程...在JDK5发布时,HotSpot推出了一款在强交互应用中几乎可称为具有划时代意义的垃圾收集器——CMS收集器。...这款收集器是HotSpot虚拟机中第一款真正意义上支持并发的垃圾收集器,它首次实现了让垃圾收集线程和用户线程(基本上)同时工作。

31621

JVM之垃圾回收-垃圾收集器

概述 如果说前面介绍的收集算法(JVM之垃圾回收-垃圾收集算法)是内存回收的抽象策略,那么垃圾收集器就是内存回收的具体实现。...JVM规范对于垃圾收集器的应该如何实现没有任何规定,因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器差别较大,这里只看HotSpot虚拟机。...就像没有最好的算法一样,垃圾收集器也没有最好,只有最合适。我们能做的就是根据具体的应用场景选择最合适的垃圾收集器。...Serial收集器 Serial(串行)收集器收集器是最基本、历史最悠久的垃圾收集器了(新生代采用复制算法,老生代采用标志整理算法)。大家看名字就知道这个收集器是一个单线程收集器了。...在后续的垃圾收集器设计中停顿时间在不断缩短(但是仍然还有停顿,寻找最优秀的垃圾收集器的过程仍然在继续) 整理一下前面关于Serial收集器的知识 特点 针对新生代的收集器; 采用复制算法; 单线程收集;

54910

十、垃圾收集器

上图是基于JDK1.7 Update 14之后的HotSpot虚拟机中包含的垃圾收集器,总共有7种收集器。...特性: 这个收集器是一个单线程的收集器,但它的“单线程”的意义并不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。...在JDK 1.5时期,HotSpot推出了一款在强交互应用中几乎可认为有划时代意义的垃圾收集器——CMS收集器,这款收集器是HotSpot虚拟机中第一款真正意义上的并发收集器,它第一次实现了让垃圾收集线程与用户线程同时工作...CMS收集器无法处理浮动垃圾 CMS收集器无法处理浮动垃圾,可能出现“Concurrent Mode Failure”失败而导致另一次Full GC的产生。...仅在CMS收集器时生效 九、七种垃圾收集器总结 7种垃圾收集器对比: 类型 特性 算法 适用场景 优缺点 Serial 单线程收集器 复制算法 Serial收集器是虚拟机运行在Client模式下的默认新生代收集器

29810

CMS垃圾收集器

目录 1.常见的垃圾收集器的组合方式 young Tenured JVM options Serial Serial -XX:+UseSerialGC Parallel Scavenge Serial...这个阶段主要是清除那些没有标记的对象并且回收空间; 由于CMS并发清理阶段用户线程还在运行着,伴随程序运行自然就还会有新的垃圾不断产生,这一部分垃圾出现在标记过程之后,CMS无法在当次收集中处理掉它们,...这一部分垃圾就称为“浮动垃圾”。 (7)并发重置 这个阶段并发执行,重新设置CMS算法内部的数据结构,准备下一个CMS生命周期的使用。...由于在垃圾收集阶段用户线程还需要运行,那也就还需要预留有足够的内存空间给用户线程使用,因此CMS收集器不能像其他收集器那样等到老年代几乎完全被填满了再进行收集,需要预留一部分空间提供并发收集时的程序运作使用...gc线程正在标记存活对象,用户线程同时向老年代提升新的对象,清理工作还没有开始,old gen已经没有空间容纳更多对象了,这时候就会导致concurrent mode failure, 然后就会使用串行收集器回收老年代的垃圾

1.2K30

Java 垃圾收集器垃圾收集算法

垃圾收集器垃圾收集算法 在之前曾分享了一篇 Junnplus 关于 Python 垃圾回收的文章,孟同学读后不服,立马撰文以表达对 Java 真挚的爱❤️。...在 Java 中,垃圾回收是个基础而有趣的话题,本文主要讲解 Java 垃圾收集器垃圾收集算法,首先,需要理解几个概念: 引用计算法:通俗的讲,引用计数法是这样这样一种场景,在类中设置一个计数变量,专门用来存储当前类有多少引用...假设经过了一次内存回收,空间中剩余一共 10k 内存,最大的块能容纳6k大的对象,现在要申请 7k 内存,发现在内存中找不到能容下 7k 的块,于是要提前触发一次垃圾回收,不仅仅是浪费资源,效率也大大降低...现在的主流虚拟机都采用分代收集算法,在新生代中,每次垃圾收集时都有大批对象死去,只有少量存活,适合采用复制算法,老年代中存活率高,而且没有额外的空间为它进行分配担保,适合采用标记-清理或标记-整理算法。

46420

垃圾收集器--ZGC介绍

积土而为山,积水而为海 -- 佚名 ZGC(Z Garbage Collector)是一款由Oracle公司研发的,以低延迟为首要目标的一款垃圾收集器。...: 白色:表示对象尚未被垃圾收集器访问过。...黑色:表示对象已经被垃圾收集器访问过,且这个对象的所有引用都已经扫描过。黑色的对象代表已经扫描过,它是安全存活的,如果有其他对象引用指向了黑色对象,无须重新扫描一遍。...灰色:表示对象已经被垃圾收集器访问过,但这个对象上至少存在一个引用还没有被扫描过。...ZGC存在的问题 ZGC最大的问题是浮动垃圾。 浮动垃圾 ZGC的停顿时间是在10ms以下,但是ZGC的执行时间还是远远大于这个时间的。

57040

JVM之垃圾收集器

因为新生代和老年代采用回收算法的不同,垃圾收集器相应地也分为新生代收集器和老年代收集器。其中新生代收集器主要有Serial收集器、ParNew收集器和Parallel Scavenge收集器。...如果两个收集器之间存在连线,就说明它们可以搭配使用。 1.新生代垃圾收集器 1.1Serial(串行GC)收集器 Serial收集器是一个新生代收集器,单线程执行,使用复制算法。...2.老年代垃圾收集器 2.1 Serial Old收集器 Serial Old收集器作用于老年代,采用单线程和标记-整理算法来实现垃圾回收。在回收垃圾的时候同样会挂起所有用户线程,造成应用的停顿。...CMS收集器以获取最短回收停顿时间为目标,采用多线程并发以及标记-清除算法来实现垃圾回收。...CMS收集器可以最大程度地减少因垃圾回收而造成应用停顿的时间。 ?

39140

六、经典垃圾收集器

大家只看名字就能够猜到,这个收集器是一个单线程工作的收集器,但它的“单线程”的意义并不仅仅是说明它只会使用一个处理器或一条收集线程去完成垃圾收集工作,更重要的是强调在它进行垃圾收集时,必须暂停其他所有工作线程...收集器到Parallel收集器,再到Concurrent Mark Sweep(CMS)和Garbage First(G1)收集器,最终至现在垃圾收集器的最前沿成果Shenandoah和ZGC等,我们看到了一个个越来越构思精巧...,越来越优秀,也越来越复杂的垃圾收集器不断涌现,用户线程的停顿时间在持续缩短,但是仍然没有办法彻底消除(这里不去讨论RTSJ中的收集器),探索更优秀垃圾收集器的工作仍在继续。...由于在整个过程中耗时最长的并发标记和并发清除阶段中,垃圾收集器线程都可以与用户线程一起工作,所以从总体上来说,CMS收集器的内存回收过程是与用户线程一起并发执行的。...微信截图_20200910131159.png 3、Garbage First收集器 在G1收集器出现之前的所有其他收集器,包括CMS在内,垃圾收集的目标范围要么是整个新生代(Minor GC),要么就是整个老年代

35830

JVM(HotSpot) 垃圾收集器

需要提前了解的知识: JVM内存模型 JVM垃圾回收算法 HotSpot虚拟机所有的垃圾收集器如下图: HotSpot 所有垃圾收集器 上面有7种收集器,分为部分,上面为新生代收集器,下面是老年代收集器...图1 2、ParNew(并行GC)收集器 ParNew收集器其实就是serial收集器的多线程版本,除了使用多条线程进行垃圾收集之外,其余行为与Serial收集器一样。...年轻代垃圾收集 在G1垃圾收集器中,年轻代的垃圾回收过程使用复制算法。把Eden区和Survivor区的对象复制到新的Survivor区域。...如下图: 图6 老年代垃收集 对于年老代上的垃圾收集,G1垃圾收集器也分为4个阶段,基本跟CMS垃圾收集器一样,但略有不同: Initial Mark阶段 - 同CMS垃圾收集器的Initial Mark...但是G1的垃圾收集器的Initial Mark阶段是跟minor gc一同发生的。

691140

GC算法 垃圾收集器

GC算法 垃圾收集器 概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了。...垃圾收集器      如果说收集算法是内存回收的方法论,垃圾收集器就是内存回收的具体实现 Serial收集器 串行收集器是最古老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收。...新生代、老年代使用串行回收;新生代复制算法、老年代标记-压缩;垃圾收集的过程中会Stop The World(服务暂停) 参数控制:-XX:+UseSerialGC  串行收集器 ParNew收集器 ParNew...N毫秒,这几乎已经是实时Java(RTSJ)的垃圾收集器的特征了。...上面提到的垃圾收集器,收集的范围都是整个新生代或者老年代,而G1不再是这样。

33830
领券