/**
* java 性能优化实践
* G1垃圾收集器
* G1在设计上重新思考了到目前为止我们都在使用的分代的概念
* G1堆布局和区域
* G1堆基于区域的概念,这些区域的大小默认为1MB,更大的堆上会更大。
* 区域的使用支持非连续的分代,从而使收集器可以【不需要在每次运行时收集所有垃圾】
* @整体的G1堆在内存中仍然是连续的,只是组成每一代的内存不必再连续的
*
* G1算法设计
* 使用了一个并发标记阶段
* 是一款疏散收集器
* 提供了统计型压缩
* @占用空间超过区域一半的对象被直接分配到巨形区域中——空闲的连续区域,可以立即成为Tenured的一部分-而不是Eden区
* 新生代的大小是自适应的,基于整体的暂停时间来调整
* G1有一个相关的功能来帮助区域进行跟踪——记忆集(remembered set)
* 指向当前区域的外部引用
*
* @G1 各阶段
* 初始标记 STW
* 并发根扫描
* 并发标记
* 重新标记 STW
* 清理 STW
* @G1 的基本jvm标志
* +XX:UseG1GC
* G1是围绕暂停时间目标设计的,这样可以使得开发人员指定应用程序在每个垃圾收集周期中应该暂停的最大时间
*/
来源《java 性能优化实践》