
课程咨询: 400-996-5531
投诉建议: 400-111-8989
认真做教育 专心促就业
我们在前几期的文章中给大家简单介绍了程序员在学习Java编程开发语言的时候需要掌握的一些基础知识等内容,而本文我们就再来学习一下,Java编程垃圾回收器用法分析。
垃圾回收器(GarbageCollector,GC)是实现垃圾回收算法并应用在JVM环境中的内存管理模块。
Serial回收器/SerialOld回收器
Serial回收器是早期(JDK1.3.1之前)虚拟机新生代回收的选择,是一个主要应用于YGC的垃圾回收器,采用的垃圾回收算法是标记-整理算法,通过串行单线程的方式完成任务,串行就意味着每次只会使用一个CPU或一条回收线程去完成垃圾回收工作,并且在进行垃圾回收时,不允许其他线程与它一起工作,必须要停掉其他所有的工作线程,直至收集结束。这种情况就称为:“StopTheWorld”简称STW,即垃圾回收的某个阶段会暂停整个应用程序的运行。Serial回收流程图如下:
FGC的执行时间较长,如果频繁引起FGC会严重影响应用程序的性能。此外,还有一种回收器叫SerialOld回收器,它是Serial回收器的老年代版本,所以它也一样是单线程回收器,采用的也是标记-整理算法。
即使是这样,与其他回收器的单线程比,Serial回收器也是有着优于它们的地方,对于限定单个CPU的环境来说,Serial回收器由于没有线程交互的开销,专心做垃圾收集自然可以获得高的单线程回收效率。不论是Serial还是SerialOld回收器,它们的主要意义是在于给Client模式下的虚拟机使用。
CMS回收器
CMS(ConcurrentMarkSweep)回收器是一种以获取短回收停顿时间为目标,是目前比较流行的垃圾回收器。对于Java编程语言实现互联网或者B/S系统的服务端,并且十分重视服务的响应速度,希望停顿时间越短越好,方便给予用户更好的使用体验,采取CMS回收器的策略就十分符合这种应用场景。
CMS回收器是基于标记-清除算法实现的,整个垃圾回收工作步骤分为4个步骤:
初始标记(CMSinitialmark)
并发标记(CMSconcurrentmark)
重新标记(CMSremark)
并发清除(CMSconcurrentsweep)
对于1、3步骤,也就是初始标记和重新标记阶段还是会引发STW(StopTheWorld),而2、4步骤的并发标记和并发清除两个阶段可以和应用程序并发执行,所以也属于比较耗时的操作,但是无须担心CMS回收器会影响到应用程序的正常运行。
初始标记阶段仅仅只是标记一下GCRoots能直接关联到的对象,速度很快;并发标记阶段就是进行GCRootsTracing的过程;重新标记阶段是为了修正并发标记期间,因用户程序继续运行而可能会导致标记产生变动的那一部分对象,进行标记记录,这一阶段的停顿时间一般会比初始标记阶段长点,但不会比并发标记阶段的时间长。
在垃圾回收的4个步骤中,并发标记和并发清除过程中所耗时长,并且它们是可以跟用户的线程在同一时间工作,所以从时间上来看,CMS回收器的内存回收过程和用户线程是一起并发执行的。CMS回收流程图大致如下:
所以CMS回收器是一款十分优秀的收集器,有着并发收集、低停顿的优点,所以也称为并发低停顿收集器,尽管如此,CMS还是存在不足之处:
CMS回收器对CPU资源十分敏感。虽然说,在并发阶段,CMS回收器可以跟用户线程并发执行,但还是会占用一部分的CPU资源,从而导致应用程序响应变慢,系统压力过高,导致系统终的吞吐量降低。
CMS回收器无法处理浮动垃圾,可能会导致出现“ConcurrentModeFailure”失败而导致另一次FGC的产生。
CMS回收器执行完垃圾回收后,会产生大量的空间碎片。这是由于CMS回收器采取的标记-清除算法所带来的影响(具体可以往上看标记-清除算法部分)。为了解决这一问题,CMS回收器可以通过配置-XX:+UseCMSCompactAtFullCollection开关参数(默认是开启的)。用于在CMS回收器顶不住要进行FGC的时候,开启内存碎片的合并整理过程,解决了空间碎片问题,但由于空间整理期间是无法并发的,无法并发就会引起STW的情况。但是好在CMS回收器的设计者为了减少STW次数,允许通过配置-XX:+CMSFullGCsBeforeCompaction=n参数,该参数n意味着,在执行了n次FGC之后,JVM才能在老年代执行空间碎片整理;参数默认值为0,则表示每次执行完FGC之后,都要进行空间碎片整理。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。