1. G1垃圾收集器停顿预测模型
G1收集器突出表现出来的一点是通过一个停顿预测模型根据用户配置的停顿时间来选择Cset的大小,从而达到用户期待的应用程序暂停时间
通过-XX:MaxGCPauseMillis
参数来设置,这一点有点类似于Parallel Scavenge收集器.关于停顿时间的设置并不是越短越好
- 设置的时间越短意味着每次收集的Cset越小,导致垃圾逐步积累变多,
最终不得不退化成Serial GC
; - 停顿时间设置的过长,那么会导致每次都会产生长时间的停顿,影响了程序对外的响应时间
2 相关实践
2.1 不断调优暂停时间指标
通过-XX:MaxGCPauseMillis=x
可以设置启动应用程序的暂停时间, G1在运行的是会根据这个参数选择Cset来满足响应时间的设置
一般情况下这个值设置到100ms和200ms都是可以的(不同情况下会不一样), 但是如果设置成50ms就不太合理
暂停的时间设置的太短,就会导致出现G1跟不上垃圾产生的速度,最终退化成Full GC
所以对这个参数的调优是一个持续的过程,逐步调整到最佳状态
2.2 不要设置新生代和老年代的大小
-
G1收集器在运行的时候回调整新生代和老年代的大小
通过改变代的大小来调整对象晋升的速度以及晋升年龄,从而达到我们为收收集器设置的暂停时间目标 -
设置了新生代的大小相当于放弃了G1为我们做的自动调优,我们需要做的只是设置这个堆内存的大小,剩下的就交给G1自己去分配各个代的大小即可
2.3 关注Evacaution Failure
其类似于CMS里面的晋升失败
, 堆空间的垃圾太多导致无法完成Region之间的拷贝,于是不得退化成Full GG来做一次全局范围内的垃圾回收
标签:G1,收集器,停顿,模型,时间,设置,暂停 来源: https://www.cnblogs.com/juniorMa/p/14343550.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。