G1垃圾收集器内存划分与角色分派
-
G1的设计规划是要替换掉CMS
- G1在某些方面弥补了CMS的不足,比如,CMS使用的是mark-sweep算法,自然会产生内存碎片;然而G1基于copying算法,高效的整理剩余内存,而不需要管理内存碎片。
- 另外,G1提供了更多手段,已达到对GC停顿时间的可控。
-
Hotspot虚拟机主要构成
-
传统垃圾收集器堆结构
-
G1收集器堆结构
- heap被划分为一个个相等的不连续的内存区域(regions),每个region都有一个分代的角色:eden、survivor、old;
- 对每一个角色的数量并没有强制的限定,也就是说对每种分代内存的大小,可以动态变化;
- G1最大的特点就是高效的执行回收,优先去执行那些大量对象可回收的区域(region)。
-
G1使用了gc停顿可预测的模型,来满足用户设定的gc停顿时间,根据用户设定的目标时间,G1会自动地选择哪些region要清除,一次清除多少个region
- G1从多个region中复制存活的对象,然后集中放入一个region中,同时整理、清除内存(copying收集算法)
- G1从多个region中复制存活的对象,然后集中放入一个region中,同时整理、清除内存(copying收集算法)
-
G1 vs CMS
- 对比使用mark-sweep的CMS,G1使用的copying算法不会造成内存碎片;
- 对比Parallel Scavenge(基于copying)、Parallel Old收集器(基于mark-compact-sweep),Parallel会整个区域做整理导致gc停顿会比较长,而G1只是特定地整理几个region。
- G1并非一个实时的收集器,与parallel Scavenge一样,对gc停顿时间的设置并不绝对生效,只是G1有较高的几率保证不超过设定的gc停顿时间。与之前的gc收集器对比,G1会根据用户设定的gc停顿时间,智能评估哪几个region需要被回收可以满足用户的设定。