网站建设中的风险风险,做一个聊天软件多少钱,wordpress 繁体 插件,cd网站建设您好#xff0c;我是湘王#xff0c;这是我的CSDN博客#xff0c;欢迎您来#xff0c;欢迎您再来#xff5e;看了那么多G1 GC的传说#xff0c;再来看看怎么预防GC把工程师精心设计的系统给搞垮。在JVM的运行过程中#xff0c;既有创建对象#xff0c;又有GC#xff0…您好我是湘王这是我的CSDN博客欢迎您来欢迎您再来看了那么多G1 GC的传说再来看看怎么预防GC把工程师精心设计的系统给搞垮。在JVM的运行过程中既有创建对象又有GC可能还有Stop the World或者二者循环进行。而年轻代GC对系统的影响一般情况下不大但有些特殊的情况影响会非常大1、堆内存过小只有几百M2、堆内存过大有几十G此时的垃圾回收器不能用ParNew只能用G1。那么老年代GC对系统的影响呢取决于年轻代对象进入老年代的条件以及一些其他条件1、对象年龄判断默认在年轻代存活15次之后进入老年代2、动态年龄判断若Minor GC后Survivor中全部对象的大小之和Survivor大小的50%就把年龄最大的对象直接放进老年代3、Survivor空间不足Minor GC后存活对象太多Survivor空间不足则存活对象直接进入老年代。如果年轻代的Survivor空间过小上述的第二条和第三条就会频繁发生而且老年代GC至少比年轻代GC慢10倍以上。再来澄清一些概念免得混淆1、Minor GC Young GC2、Full GC Young GC Old GC 元空间GC3、Major GC这个概念最好不要用4、Mixed GC是G1中特有的概念指G1的混合回收阶段。 各类GC的触发时机1、Young GC的触发时机年轻代的Eden区满了之后就会触发采用复制算法完成GC2、Old GC的触发时机年轻代历次Young GC后进入老年代的对象总和的平均大小 老年代可用空间或者老年代空间不足或者老年代空间使用率 92%3、当存放类信息和各类常量的元空间区也满了的时候就会触发Full GC。 案例一背景1、基于商家产生的大量数据开发的一套Business Intelligence2、例如每天访客数量、成交量、付费转化率等等3、经营数据 - Hadoop/Spark/Flink - MySQL/ElasticSearch4、刚开始业务量不大Eden1GS0S1100M。它的技术痛点是1、前端实时自动刷新报表2、大数据量报表3、高并发特征单机500次请求/秒每次请求需要加载100K数据传给前端因此有50M/秒的空间消耗1G空间20秒填满4、Young GC频繁触发每次耗时几十毫秒暂时影响不大。 为了应对这种情形配置升级1、加大机器内存Eden16GS0S11G2、按照50M/秒的消耗速度需要320秒就能填满16G空间3、ParNew CMS垃圾回收有严重卡顿现象JDK升级到1.8以上采用G1垃圾回收。 案例二背景1、某系统会不停地从MySQL及其他数据源里提取大量的数据加载到JVM里进行计算处理2、单台机器大概100次/分钟的数据提取和计算任务3、每次提取10000条数据每次计算耗费10秒左右4、10000条大概消耗10M空间100次/分 × 10M/次 1G/分5、Eden1.2GS0S1100M6、年轻代1分钟就会耗尽。 它多久触发一次Full GC呢1、每次计算10000条要10秒钟假设剩余20次计算任务仍在计算2、10M/次 × 20次 200M空间无法回收3、200M Survivor执行空间担保流程后对象直接进入老年代4、1.5G / 200M/分 7分老年代7分钟就会被填满5、每7分钟触发一次Full GC清空老年代。 GC优化方案1、在当前频率下增加年轻代空间增大Survivor2、如果将该系统的工作负荷扩大10倍3、100M/分钟空间消耗Full GC的时间也会大大缩短4、只需十多秒就能触发一次Full GC5、使用大内存机器优化JVM空间均扩大10倍6、使用G1垃圾回收。感谢您的大驾光临咨询技术、产品、运营和管理相关问题请关注后留言。欢迎骚扰不胜荣幸