从原理聊JVM(二):从串行收集器到分区收集开创者G1
原文中文,约6300字,阅读约需15分钟。发表于: 。随着Java的进化过程,涌现出各种不同的垃圾回收器,从串行执行到并行执行,从高吞吐到低延迟,终极目标就是让开发人员专注于程序的代码书写而无需关注内存管理。
本文介绍了G1垃圾回收器的触发时机、回收范围和运行过程,以及其优点和缺点。G1将堆内存划分为多个大小相等的独立区域,能建立“停顿时间模型”,使暂停时间可控,并尽量将 -XX:MaxGCPauseMillis 作为停顿目标。G1的垃圾回收过程采用标记复制的算法,避免了空间碎片化的问题。但G1的内存占用较高,需要建立卡表,且需要写前屏障和写后屏障,计算负载高。最佳实践是不要设置年轻代大小,暂停时间目标不要过于严苛,选择垃圾回收器应根据业务特征和系统情况。