多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 分代收集 G1依旧属于分代的垃圾收集器,会区分新生代和老年代(Eden、Survivor0、Survivor1、老年代等),但是从堆结构上来看,它不会要求整个Eden、Survivor0、Survivor1、老年代都是连续的,可能一个region在这次垃圾回收之前是Eden region,回收之后可能就充当Old region了,称之为分区算法 ![](https://img.kancloud.cn/9e/43/9e434bc86fbf5f1b47bd187567323b98_1112x333.png) * 一个region有可能属于Eden、Survivor或者Old(Tenured)中的一种角色,且region在垃圾回收过后的角色可能发生改变;清空之后的region会被记录在空闲列表中等待下次分配 * Humongous:当一个region的大小无法存放一个大对象的时候,就会被分配到Humongous区;对于堆中的大对象,默认直接分配到老年代中,但是如果该对象是一个短期存在的大对象,就会堆垃圾收集造成负面影响,为了解决这个问题,G1划分了H区作为大对象的分配区域,如果一个H区装不下,那么G1会寻找连续的H区进行存放,若没有连续的H区,则可能会不得不触发一次Full GC; * 在region内部分配对象内存的时候使用的是指针碰撞(Bump the pointer)