《深入理解Java虚拟机》读书笔记(JVM常识汇总三)

垃圾收集器:主要分为新生代的垃圾收集器和老年代的垃圾收集器,互相搭配使用。

新生代垃圾收集器:

Serial收集器:这是一个单线程的收集器,它在进行垃圾收集时候,必须暂停其他所有的工作线程。即“Stop The World”, 也就是你妈妈在打扫你房间的时候,你肯定得等她打扫完再活动,不能她在打扫的时候,你还在一边制造垃圾。 对于单个CPU的环境来说,Serial收集器在工作时候没有线程之间的交互的开销,简单而高效。 在用户的桌面应用场景中,分配给JVM的内存不会很大,所以收集垃圾所需要的停顿时间也可以控制在几十毫秒最多一百毫秒以内, 只要不是频繁发生,这点停顿是可以接受的。 Serial收集器适用于这种Client模式。

ParNew 收集器:它就是Serial的收集器的多线程版本,工作时候,使用多条线程进行垃圾收集。和Serial几乎相同, 但是它却是在Server模式下的虚拟机中首选的新生代收集器,其中有一个与性能无关但是很重要的原因是,除了Serial,只有它可以和老年代的CMS收集器搭配工作。

Parallel Scavenge : 它也是一个新生代的垃圾收集器,采用复制算法,也是并行的多线程收集器。它的特点是它的关注点和其他的垃圾收集器不同,它主要是尽可能的缩短垃圾收集时,用户线程的停顿时间。从而提高吞吐量(吞吐量就是 CPU运行用户代码的时间与CPU总消耗时间的比值。 即 运行用户代码的时间/(运行用户代码的时间)+(垃圾收集器的时间)),停顿时间越短,就越适合需要和用户交互的程序,高吞吐量则可以高效的利用CPU时间,尽快的完成程序的运算任务,主要适合在后台运算而且不需要太多交互的任务。

 

老年代的收集器:

Serial Old :Serial收集器的老年代版本,也是一个单线程收集器,使用标记-整理算法。也是在于给Client模式下的虚拟机使用,若在Server模式下,在JDK1.5及之前和 Parallel Scavenge搭配使用,二是往往作为CMS收集器进入“Concurrent Mode Failure”的后备方案。

Parallel Old :Parallel Scavenge的老年代版本,使用多线程和“标记-整理”算法,在注重吞吐量和CPU资源敏感的场合,可以优先考虑 Parallel Scavenge + Parallel Old

 

CMS(Concurrent Mark Sweep)收集器:是一种获取最短回收停顿时间为目标的收集器,CMS收集器适合作用在BS系统的服务器端上。 它采用的是标记-清除 算法。

运作过程分为4个阶段: 1、初始标记 2、并发标记  3、重新标记 、4 并发清除  

初始标记和重新标记这2个过程仍然需要 “Stop The World” ,但是这个过程很快。 整个过程中最耗时的是 并发标记和并发清除阶段,但是这2个阶段可以和用户线程一起工作,所以用户是感受不到的。 重新标记阶段则是为了修正并发标记期间,因用户程序继续运作而导致标记发生变动的那一部分对象的标记记录,这个阶段的停顿一般会比初始标记长一些,但远比并发标记时间短。

CMS的优点:停顿时间短,目前常用。

缺点:1、CMS是一个采用 “标记-清除”算法的收集器,所以会产生大量的空间碎片。可以通过对老年代进行压缩,执行空间碎片整理,但这个阶段也会Stop The World 。

2、由于CMS在最后一个阶段,即 并发清除阶段,是和用户线程并发的,用户线程可能会产生新的垃圾,即这一部分的垃圾是在标记过程之后才产生的。 所以CMS无法在此次的收集中处理它们。只好等待下一次的收集。 这一部分垃圾称之为 “浮动垃圾” ,CMS收集器无法处理浮动垃圾。

3、G1收集器:

在JDK11中,G1已经是默认的垃圾收集器了。

在G1收集器模式下,堆的内存就不是新生代和老年代称呼了。 G1将堆内存分割成了若干个大小相同的region。包括 Eden,Survivor,Old,Humongous。 Humongous是一种特殊的Old类型,专门用来存放大型对象。 G1将空间分为多个区域,优先回收垃圾最多的区域,优先回收价值(即回收后所获得的空间大小以及回收所需要的时间)大的region。当然这也是(Garbage -First)名称的由来。 G1的一大优势在于可预测的停顿时间,因为使用划分内存空间以及优先级回收的这种方式,保证了G1可以在有限的时间内获取尽可能高的收集效率,完成垃圾回收任务。

G1可以充分利用多CPU、多核的硬件优势,来缩短"Stop The World" 的时间。G1具备压缩功能,可以避免碎片问题。从整体上来看,G1采用的是“标记-整理”算法实现,从局部,region之间来看,G1收集器采用的是 复制算法,这2种算法都可以说明G1在运行期间不会产生内存碎片。再加上可以存放大型对象的Humongous,收集后可以提供规整、大的可用内存。意味着G1有着很不错的性能。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值