导语
G1回收器是在JDK1.7中正式使用的一种全新的垃圾回收器,它的目标是为了取代CMS回收器。G1回收器拥有独特的垃圾回收策略,和之前的任意的一种垃圾回收器都有所不同,但是从分代策略上来说依然是属于分代垃圾回收器,也分为年轻代和老年代,任然是有eden区和survivor区。但从堆结构上看,它并不要求整个的eden区、年轻代或者老年代是连续的空间。它所使用的是一个分区算法,这个后面的分享中会介绍到。
G1特点
作为CMS的替代算法,G1使用了全新的分区算法特点如下
并行性 :G1在回收期间,可以由多个GC线程同时工作,有效的利用多核的计算能力
并发性 :G1拥有与应用程序交替执行的能力,部分工作可以与应用程序同时执行,所以,不会在一整个回收期间完全阻塞应用程序。
分代GC:G1 是一个分代收集器,与之前的收集器不同的是它兼顾了年轻代和老年代,相比较于其他的垃圾回收器,其他的收集器只能工作于年轻代或者老年代其中的一个,所以在这个方面和之前的收集器有所不同。
空间整理:G1 在回收过程中会进行适当的对象移动,与CMS不同,只是简单的标记清理对象,在若干次GC之后,CMS必须执行一次碎片整理,G1则是每次回收都会有效的复制对象,尽量减少空间碎片。
可预见性:由于分区的原因,G1可以只选取部分区域进行内存回收,可以缩小回收范围,对于全局停顿有很好的掌控性。
G1垃圾收集器参数
| 选项/默认值 | 说明 |
|---|---|
| -XX:+UseG1GC | 使用 G1 (Garbage First) 垃圾收集器 |
| -XX:MaxGCPauseMillis=n | 设置最大GC停顿时 |
G1是JDK1.7引入的全新垃圾回收器,旨在替代CMS。它采用分区算法,具有并行、并发、分代等特点,同时兼顾年轻代和老年代的回收。G1能预测停顿时间,避免长时间的Full GC。其主要包括新生代GC、并发标记周期、混合回收等阶段。新生代GC处理eden和survivor区,并发标记周期包括初始标记、根区域扫描、并发标记和重新标记。混合回收选择垃圾比例高的区域进行回收,以减少全局停顿时间。
订阅专栏 解锁全文
2287

被折叠的 条评论
为什么被折叠?



