
课程咨询: 400-996-5531
投诉建议: 400-111-8989
认真做教育 专心促就业
G1回收器是程序员在开发软件的时候会经常用到的一种垃圾回收器,而本文我们就通过案例分析来简单了解一下,Java编程G1回收器的优势都有哪些。
Hotspot在JDK7中推出了新一代G1(Garbage-First)垃圾回收,通过-XX:+UseG1GC参数启用。在JDK11中,已经把G1设为默认垃圾回收器,可通过jstat命令查看垃圾回收情况。和CMS相比,G1具备压缩功能,能避免碎片问题。并且G1的暂停问题更加可控,总体上性能还是很不错的。
在G1之前,其他回收器进行垃圾收集时,收集的范围都是整个新生代或老年代,而G1是将Java堆空间分割成了若干相同大小的独立区域,即region,其中包括Eden、Survivor、Old、Humongous四种类型。其中,Humongous是特殊的Old类型,专门放置大型对象。图中可以看出,新生代和老年代不再是物理隔离,它们都是一部分Region(不再连续)的集合。
G1回收器之所以能够建立可预测的停顿时间模型,是因为它可以有计划地避免在整个Java堆中进行全区域的垃圾收集。G1跟踪各个Region里面的垃圾堆积的价值大小(回收所获得的空间大小以及回收所需要的时间),在后台维护起一个优先级别列表;所以它每次只需要根据允许收集的时间,优先收集价值回收率高的Region(这也是Garbage-First名称的由来)。这种使用Region方式划分成若干份大小相同的内存空间,以及有优先级别根据的区域回收方式,保证了G1回收器在有限的时间内提高了回收效率。
与其他的GC回收器比,G1回收器有着以下的特点:
并行与并发:G1能充分利用多核、多CPU环境下的硬件优势,使用多个CPU来缩短STW停顿的时间;部分回收器需要停顿其他Java线程执行的GC动作,而G1回收器可以与Java程序并发执行。
回收算法:G1采用的是Mark-Copy(复制算法),有很好的空间整合能力,在G1执行期间不会产生大量的空间碎片,并且回收完成之后能够提供规整的可用内存,有利于程序长时间运行。
可预测的停顿:能够尽可能快地在指定时间内完成垃圾回收任务,能够让使用者明确指定在一个长度在M毫秒的时间片段内,消耗在垃圾收集上的时间不能超过N毫秒(M>N)。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。