1、特点官网链接
发展过程:
1.7出现
1.8推荐使用
1.9默认使用
1、分代收集(仍然保留分代的概念)
2、空间整合(整体上属于“标记-整理”算法,不会导致空间碎片)
3、可预测的停顿(比CMS更先进的地方在于能让使用者明确指定一个长度为M毫秒的时间片段内,消
耗在垃圾收集上的时间不得超过N毫秒)
4、所谓Garbage-Frist,其实就是优先回收垃圾最多的Region区域
将整个Java堆划分为多个 大小相等的独立区域(Region)
个数:2048个
大小:固定一样,数值范围在1M~32M(必须是2的n次幂)
分代:Region集合(新生代和老年代不再是物理隔离)
设置大小:-XX:G1HeapRegionSize=M
二、算法如果对象太大,一个Region放不下[超过Region大小的50%],那么就会直接放到H中
标记-整理
三、过程(步骤) 1、初始标记(Initial Marking)标记以下GC Roots能够关联的对象,并且修改TAMS的值,需要暂 停用户线程
2、并发标记(Concurrent Marking)从GC Roots进行可达性分析,找出存活的对象,与用户线程并发执行
3、最终标记(Final Marking)修正在并发标记阶段因为用户程序的并发执行导致变动的数据,需暂停用户线程
4、筛选回收(Live Data Counting and Evacuation)对各个Region的回收价值和成本进行排序,根据用户所期望的GC停顿时间制定回收计划
四、优缺 优点:1、可以降低停顿时间,通过设置让停顿时间更短
2、可以变相的解决空间碎片
答案:2G以上
原因:region共2048个,每个region大小1M~32M,所以最小2048M = 2G
答案:官网链接
除非您的应用程序有相当严格的暂停时间要求,否则首先运行应用程序并允许VM选择收集器。
如有必要,调整堆大小以提高性能。
如果性能仍然达不到您的目标,请使用以下准则作为选择收集器的起点。
使用-XX:+UseSerialGC选择串行采集器
场景2:应用程序在单处理器上运行,并且没有停顿时间要求1)让VM选择采集器
2)使用-XX:+UseSerialGC选择串行采集器
1)让VM选择收集器
2)使用-XX:+UseParallelGC选择并行收集器。
选择具有-XX:+useConMarkSweepGC或-XX:+UseG1GC的并发收集器。



