JVM总结(六)

1、G1可以同时回收新生代和老生代的对象。
2、G1特点:
1)将堆分成了大小相等的多个Region。
2)可以设置垃圾回收的预期停顿时间。比如1小时内的STW时间不能超过1分钟。
3、G1会追踪每个Region的回收价值。就是如果对这个Region回收,需要耗费多长时间,可以回收掉多少垃圾。
4、G1的核心设计思路:将STW控制在你指定的时间范围内,同时在有限的时间内尽可能回收更多的垃圾对象。
5、最多可以有2048个Region。每个Region大小必须是2的倍数。可以通过-XX:G1HeapRegionSize参数来设定。
6、开始时,默认新生代占比5%。可以通过-XX:G1NewSizePercent来设置。最多占比不会超过60%,可以通过-XX:G1MaxNewSizePercent来设置。
7、新生代还是有Eden和Suvivor,各拥一部分Region。
8、G1的新生代垃圾回收
新生代达到了堆内存的60%,Eden区占满了对象。就会触发GC,STW,复制算法。但是这里与之前的收集器的区别是,可以通过-XX:MaxGCPauseMills参数指定停顿时间,默认200ms。
9、提供了Region专门用于存放大对象,而不会让其进入老年代的Region。
10、G1中的大对象的判定,就是超过region的50%。太大就会横跨多个region。
11、新生代、老年代回收时会顺带把大对象的region一起回收。
12、混合回收时一旦空闲出来的Region数量达到了堆内存5%,就会立即停止混合回收,可以通过-XX:G1HeapWastePercent来设置。
13、存活对象低于85%的Region才可以回收,可以修改参数
-XX:G1MixedGCLiveThresholdPercent
14、G1到底会分配多少Region给新生代,多久触发一次新生代GC,每次多长时间,是不确定的,必须通过工具查看才能知道。
15、垃圾回收的时间限制设置的太小,GC就比较频繁;太大,GC时STW时间就会太长。
16、新生代GC如何优化:堆内存要足够,合理设置-XX:MaxGCPauseMills参数。
17、mixed GC如何优化,思路就是尽量避免对象尽快进入老年代,核心的点还是-XX:MaxGCPauseMills参数,这个如果设置很大,就要运行很久才回收,存活下来的也多,可能就会进入老年代。
18、G1新生代和mixed gc优化的核心是,-XX:MaxGCPauseMills参数的合适设定。
19、G1非常适合超大内存的机器,这是如果不用G1,新生代每次都会回收很多垃圾,停顿时间太长。
20、G1非常适合的场景:比如实时通信追求低时延业务;大内存机器。

什么时候触发新生代+老年代的混合垃圾回收?

当老年代占据了堆内存的45%时就会触发mixed gc。可以通过-XX:InitiatingHeapOccupancyPercent参数来修改。复制算法。

G1垃圾回收的过程

1)初始标记,STW,快。
2)并发标记,慢,但是并发的。
3)最终标记,STW。
4)混合回收,会计算每个Region的回收价值,选择部分Region回收,必须控制在指定时间内,STW。(从新生代、老年代、大对象都回收)。复制算法。
注意:
1)前三阶段和CMS一样。
2)最后一个阶段混合回收会STW。通常会执行多次,以免程序卡壳太久。默认是执行8次,可以通过参数-XX:G1MixedGCCountTarget来设置。
3)G1整体基于复制算法,没内存碎片,不会像CMS那样标记-清理后再进行碎片整理。

混合回收失败

回合回收,新生代和老年代都是复制算法,如果拷贝的过程中没有空闲的Region,就会触发失败。立马STW,单线程标记、清理、压缩、整理空闲出一批Region,这个过程极慢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值