4.G1回收
2020-12-14 19:04:56 4 举报
G1回收
作者其他创作
大纲/内容
新生代老年代混合回收(Mixed GC)
G1
大对象Region1.对象超过一个Region的50%为大对象,存放到专门的Region,甚至横跨多个Region2.G1中新生代老年代的Region会不停变化,因此当新生代/老年代会被回收后,空出的部分Region就可以不属于新生代,而用来存放大对象3.新生代、老年代回收时,会顺带回收大对象Region
老年代
超过年龄阈值,动态年龄判断晋升老年代
回收过程
参数-XX:InitiatingHeapOccupancyPercent设置,老年代最大占比。默认45%,当老年代占据堆内存45%Region时,触发新老年代混合回收Mixed回收,新生代和老年代都是基于复制算法回收,把各个Region的存活对象拷贝到别的Region里去,拷贝过程中没有空闲的Region可以承载存活对象了,就会触发一次失败。一旦失败,里面切换为停止系统程序,然后采用单线程进行标记、清理和压缩整理,空闲出来一批Region,该过程是极慢极慢的
STW状态,根据并发标记阶段记录的对象修改,最终标记有哪些存活对象,有哪些垃圾对象
进入STW,标记GC Root直接能引用的对象
初始标记
堆内存/4096M
并发标记
1.-Xms/-Xmx设置堆内存大小2.-XX:+UseG1GC设置使用G13.以4G内存为例子,JVM允许最大Region数为2048,必须为2的倍数,参数-XX:G1HeapRegionSize设置每个Region大小
混合回收
计算新老年代、大对象Region的存活对象数据、存活对象占比、执行垃圾回收的预期性能和效率,根据保证指定时间内回收尽可能多的垃圾
G1动态内存管理策略
最终标记
1.默认新生代占比5%,参数-XX:G1NewSizePercent设置新生代占比。最大占比不会超过60%,参数-XX:G1MaxNewSizePercnet设置2.-XX:SurvivorRatio=8,设置S区和E区占比
Region2MB
1.新生代复制算法,进入STW状态。E区Region存活对象放入S区Region,再回收E区的垃圾2.-XX:MaxGCPauseMills设置STW时间,默认200ms
新生代
并发交替执行,进行追踪GC Roots,从GC Roots开始追踪所有存活的对象。该阶段耗时,因为要追踪全部存活对象。记录对对象做出的修改,比如哪些对象被新建了,哪些对象失去引用了
混合回收阶段,G1运行执行多次混合回收,通过参数-XX:G1MixedGCCountTarget设置,默认8次。通过反复回收尽量让系统不要停顿时间过长,在多次回收间隙也运行一下。-XX:G1HeapWastePercent,默认5%。指一旦空闲出来的Region数量达到了堆内存的5%,立即停止混合回收,结束本次回收。-XX:G1MixedGCLiveThresholdPercent,默认85%。指确定要回收Region时,必须是存活对象低于85%的Region才能回收,如果一个Region的存活对象多余85%,拷贝到别的Region成本是很高的。
大对象Region
0 条评论
下一页